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

本文介绍了从用户态进入内核态的主要方式,包括中断、异常、自陷等,并重点讲解了快速系统调用机制及其在现代处理器上的实现。此外,还提供了一个具体的中介函数示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值