zoukankan      html  css  js  c++  java
  • 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才可以~

    爱程序 不爱bug 爱生活 不爱黑眼圈 我和你们一样 我和你们不一样 我不是凡客 我要做geek
  • 相关阅读:
    Android 7.0 UICC 分析(二)
    Android 7.0 UICC 分析(一)
    痛风有治吗?
    <学习笔记> 数论
    <学习笔记> 高精度 +
    <学习笔记> 线段树
    <学习笔记?> 链表
    <学习笔记> 手打堆模板
    <学习笔记> 倍增 lca
    <学习笔记> 最小生成树 Kruskal
  • 原文地址:https://www.cnblogs.com/yifi/p/6477495.html
Copyright © 2011-2022 走看看