VT開啟前的檢測與開啟


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

VT開啟前的檢測與開啟

該部分代碼位於:VtCode2 中。

 

一、VT開啟前的檢測工作

  1)2.2.3 檢測CPU是否支持VT:

    1> 使用CPUID指令(Intel手冊卷2查看該指令):CPUID指令01號功能,返回在ECX的第五位表示VMX,如果VMX=1,則表示CPU已經開啟VT功能。

    

     2> 因此使用如代碼判斷CPU是否支持VT功能。

    

   2)2.3.2.1 IA32_FEATURE_CONTROL寄存器

    1> 在MSR中的地址:3AH(Intel手冊卷3 23.3 VMX operation中)

      

    2> windbg: rdmsr 3a 顯示其為 05h, 101b,第一位lock位鎖住,第三位在SMX模式之外執行VMXON(上面Intel手冊下面介紹的就是這個)。

      

     3> 因此借助 第3位來監測主板是否開啟VT

      

  3)2.3.2.2 CR0與CR4固定位

    1> CR0有些位需要進行設置(操作系統已經幫我們設置好了)。

    2> CR4寄存器需要開啟VMXE位/13位。(Intel手冊卷3 2.5 控制寄存器)

      雖然說了很多,但本質上講該位置為1,判斷也是如此,因此我們使用如下代碼判斷VT是否開啟。

      

 

二、VMXON區域初始化 2.3.3

  在Intel卷3 31.5 VMM SetUp 中介紹了VMXON開始需要一塊非分頁內存,並且記錄好其物理地址。

  

  1)我們對每一個核申請一個單獨的VMX入口。(注意,這個結構我們日后隨着學習的深入會繼續補充)

    1> VMX入口數據結構

    

    2> 全局變量對每個核定義一個入口(最多128核)

    

  2)VMXOnArea 存放VMCSID的值(參考2.3.3章節說明),然后我們直接來讀取smr來賦值。

    

 

  3)不同核雖然入口不同,但其共同使用一個VMM區域,因此在不同核處理時,其申請同一個內存且賦上物理地址(猜測!!!不負責!!!!!)

    書上說明:

      

     實際在每個核中對申請內存的操作: 

      

 

  4)我們設置前面說的CR4的VMXE位/13位,設置好,之后我們也是通過這個位來監測VT是否開啟。

    之后調用微軟提供的IntelApi __vmx_on(),來開啟VMXON,如果開啟成功則返回零(詳情查看msdn),如果開啟不成功,則直接釋放內存。

      

 


免責聲明!

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



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