zoukankan      html  css  js  c++  java
  • 三环进入零环的细节(KiFastCallEntry函数分析)

     Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html

    三环进入零环的细节(KiFastCallEntry函数分析)

    1. 从三环进入零环的方式

      从三环进入零环,其存在两种:快速调用与中断调用int21

      对于如何进入,取决于一个数据结构  _KUSER_SHARED_DATA,该数据结构是三环与零环的共享内存。

      该结构中 _KUSER_SHARED_DATA+0x300(SystemCall)与+0x304(SystemCallReturn),分别记录了从进入内核与退出内核的函数。

      当操作系统初始化时,其会通过CPUID指令查询当前CPU是否支持快速调用,如果支持则这里填写通过快速调用进入零环,否则通过中断进入零环。

      快速调用的本质就是借助MSR寄存器保存一部分三环的寄存器,不用保存到内存中,这样加快进入零环的速度。

      

    2. KiSystemService与KiSerivceExit函数

      如果是快速调用,则是KiServiceExit函数进入零环;如果是中断,则通过KiSystemService进入零环。

      但是,注意,KiSystemService 最终会执行到 KiServiceExit 的一部分,然后继续往下执行,其效果如下:

      

     

    3.系统服务表 SSDT/SSSDT

    下面这篇博客详细介绍了系统服务描述符表中的函数,很好理解。

    Windows系统调用中的系统服务表

      

    4. KiFastCallEntry函数分析

      

     

      

      

     

  • 相关阅读:
    idea安装破解
    项目中邮件发送
    (转)四种复制文件的效率高低
    备份
    关于时间
    转 累加含小数点的数据:parseFloat、toFixed等
    转 Java将PDF转换成图片
    (转)JAVA实现SFTP实例
    获取浏览器参数
    js 中日期转换
  • 原文地址:https://www.cnblogs.com/onetrainee/p/11707130.html
Copyright © 2011-2022 走看看