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函数分析

      

     

      

      

     

  • 相关阅读:
    vim命令总结
    SQL语句中----删除表数据drop、truncate和delete的用法
    备份数据工具类
    JavaWeb之 JSP:自定义标签
    Android studio安装与配置
    Redis 从入门到放弃
    java相关网址汇总2
    java相关网址汇总1
    校验字符串编码工具类
    java相关网址汇总(myself)
  • 原文地址:https://www.cnblogs.com/onetrainee/p/11707130.html
Copyright © 2011-2022 走看看