系统调用计算KiFastCallEntry地址的过程以及由此得到的一种获取KiFastCallEntry地址的方式

本文详细介绍了如何通过SYSENTER指令和MSR寄存器手动计算KiFastCallEntry地址,涉及CS段地址计算、EIP获取,以及在WinDbg中的操作。还探讨了通过栈回溯获取地址的方法及其限制。
摘要由CSDN通过智能技术生成

SYENTER和SYSEXIT指令首次出现于Pentium II处理器中,其目的是为了提供一个快速(低负载) 的调用操作系统或者执行体过程的机制.SYSENTER用于运行特权级别为3的用户

调用特权级0 的系统内核代码


WinDbg中反汇编 KiFastSystemCall可以看到SYSENTER指令。









在调用SYSENTER指令前,CPU会通过下面的MSR寄存器,获取ring0的代码段和代码指针,ring0的堆栈段和堆栈指针:

MSR寄存器可以通过指令RDMSR/WRMSR来进行读写。寄存器地址如下表。  

 





当执行SYSENTER,处理器会

1.从IA32_SYSENTER_CS取出值(seg selector)加载到CS中。

2.从IA32_SYSENTER_EIP取出指令指针放到EIP中

3.将IA32_SYSENTER_CS的值加上8,将其结果加载到SS中。

4.从IA32_SYSENTER_ESP取出堆栈指针放到ESP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值