Windows內核分析索引目錄:https://www.cnblogs.com/onetrainee/p/11675224.html
EPT的開啟與處理
1. EPT的概念
EPT(Extend Page Table)擴展頁表機制,可以讓Guest機使用一份自己構建的頁表
GPA(Guest-Physical Address)、HPA(Host-Physical Address)
當Guest訪問內存時,其最終會生成一個GPA,其EPT的頁表定義在Host端,處理器在收到guest傳遞過來的之后,通過EPT頁表轉換為HPA,從而訪問物理內存。
理解轉換的關鍵思路:線性內存地址其只代表偏移,與頁表基址的位置沒有任何關系! 因此我們可以保證映射正確的基礎之上隨意更改頁表基址,只要通過偏移得出正確的結果。
2. EPT的開啟
關於EPT的一個重要寄存器是IA_32_EPT_VPID_CAP,該寄存器表明當前CPU對EPT功能的支持情況。
3. EPT頁表的構建 - EPTP
EPTP(Extend Page Table Pointer),被稱為頁表拓展指針,當構建好整個頁表之后,將該EPTP寫入指定寄存器中,之后開啟EPT模式。
EPTP的數據結構如下,我們構建的是 Walk Length為3的,因此不需要構建PTT頁表,只需構建 PML4、PDPTT、PDT 三張內存頁表。
4.EPT violation導致的VM-exit
四種情況會導致 EPT violation: not-present、read 、 write、fetch(execute);
出現這種情況,我們先GPA->HPA,然后找到其頁的數據結構將有關位置位;
其 Exit-Qualification 獲取的就是詳情,其信息如下: