Windows 7 中的 sysenter 指令如何工作?

逆向工程 拆卸 视窗 部件 内核模式
2021-06-19 06:19:21

sysenter 指令如何工作?sysenter后调用什么指令?下一条指令是否保存在寄存器中?

mov     edx,esp
sysenter
2个回答

这是如何sysenter工作的完美解释http : //www.osronline.com/article.cfm?id=257

本质上:来自用户模式的所有原生 API 调用都有一个主体,它只是将索引加载到 EAX 中,执行SystemCallStub并返回

SystemCallStub 将指向用户模式堆栈顶部的指针保存到 EDX 中并执行 SYSENTER 指令

SYSENTER 禁用中断,将线程切换到内核模式并执行位于 SYSENTER_EIP_MSR 中的指令(在 XP SP1 上为 KiFastCallEntry)

KiFastCallEntry 构建一个陷阱帧,以便在返回用户模式时知道去哪里,启用中断,并跳转到 KiSystemService

KiSystemService,除此之外,从用户堆栈(由 EDX 指向)复制参数并获取先前存储在 EAX 中的值并执行位于 KiServiceTable[EAX] 的函数

本机 API 现在在内核模式下执行,线程的先前模式设置为用户模式

SYSENTER指令影响许多寄存器,但最重要的是它设置EIPSYSENTER_EIP_MSR寄存器的值(在 IA-32 术语中)。在启动时,Windows 设置SYSENTER_EIP_MSRntoskrnl!KiFastCallEntry().

所以在高层,SYSENTER“跳转”到ntoskrnl!KiFastCallEntry().

有关更多详细信息,请参阅http://www.codeguru.com/cpp/misc/misc/system/article.php/c8223/%22System-Call-Optimization-with-the-SYSENTER-Instruction.htmhttp:// trapframe.org/just-enough-kernel-to-get-by-2/