Windows内核情景分析 学习日志之一

<p>毛德操老师对内核的研究非常透彻,一个小问题都能讲得异常清晰,PFPF。</p>
<p></p>
<p></p>
<p>系统调用</p>
<p></p>
<p>一般只有三种手段可以从用户态进入内核态:</p>
<p></p>
<p>1、中断(Interrupt)</p>
<p>2、异常(Exception)</p>
<p>3、自陷(Trap)</p>
<p>4、快速系统调用(FastSystemCall)Pentium 2之后出现</p>
<p>5、调用门 x86系列,基本上无人使用</p>
<p></p>
<p>在使用这些进入内核的方法时,同时保存了用户态的CPU、栈和参数信息。</p>
<p></p>
<p>stub即为中介函数,位于应用程序和内核之间,通过自陷或快速系统调用进入内核。</p>
<p></p>
<p>比如</p>
<p></p>
<p>__declspec(naked) __stdcall</p>
<p>NtReadFile(int dummy0, int dummy1, int dummy2)</p>
<p>{</p>
<p> __asm</p>
<p> {</p>
<p> mov eax, 152</p>
<p> mov ecx, KUER_SHARED_SYSCALL</p>
<p> call[ecx]</p>
<p> ret 9</p>
<p> }</p>
<p>}</p>
<p></p>
<p>KUSER_SHARED_SYSCALL 指向用户空间的一个地址,0x7FFE0300(也就是系统空间的0xFFDF0300),保存一个函数指针,在操作系统初始化时,根据CpuID判断是否支持快速系统调用,而使该指针指向KiIntSystemCall()或KiFastSystemCall()</p>

你可能感兴趣的:(windows)