三環進入零環的細節(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函數分析

  

 

 

 

 

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM