int 2e 与 Sysenter的区别

参考链接:http://www.dewen.net.cn/q/302/

 

 

INT 0x2E在系统调用的时候,需要进行栈切换的工作。由于Interrupt/Exception Handler的调用都是通过 call/trap/task这一类的gate来实现的,这种方式会进行栈切换,并且系统栈的地址等信息由TSS提供。这种方式可能会引起多次内存访问 (来获取这些切换信息),因此,从PentiumII开始,IA-32引入了新指令:SYSENTER/SYSEXIT。 有了这两条指令,
从用户级到特权级的堆栈以及指令指针的转换,可以通过这一条指令来实现,并且,需要切换到的新堆栈的地址,以及相应过程的第一条指令的位置

2K上,所有的调用都是通过int 2e来实现的,Int2e的服务处理例程指向的是KiSystemSerivce,因此挂钩KiSystemSystem就可以获得所有的调用
而XP上,int2e指向的还是KiSystemSerivce,但SysEntry指向的则是KiFastCallEntry函数

由于shadow ssdt的调用都是通过int 2e实现的,因此拦截shadow ssdt调用的话拦KiSystemService即可,但正常的SSDT调用都是用sysentry实现的,因此要HOOK KiFastCallEntry才可以~

posted on 2017-02-28 09:57  yifi  阅读(1550)  评论(0编辑  收藏  举报

导航