日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Intel VT学习笔记(七)—— EPT物理地址转换

發(fā)布時間:2025/3/21 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Intel VT学习笔记(七)—— EPT物理地址转换 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Intel VT學(xué)習(xí)筆記(七)—— EPT物理地址轉(zhuǎn)換

  • 要點回顧
  • EPT
    • 支持檢測
    • 9-9-9-9-12分頁
  • 實驗:EPT物理地址轉(zhuǎn)換
  • 參考資料

要點回顧

在上一篇中,已經(jīng)初步實現(xiàn)了最小VT框架,但實際上還有許多問題需要解決。

在最小VT框架中,我們僅處理了三個退出碼:

#define EXIT_REASON_CPUID 10 #define EXIT_REASON_VMCALL 18 #define EXIT_REASON_CR_ACCESS 28

要是想開發(fā)一個成熟的VT框架,需要處理的退出碼遠要多得多。

本節(jié),我們主要學(xué)習(xí)的內(nèi)容是EPT物理地址轉(zhuǎn)換。

EPT

描述:EPT全稱為Extended Page Table,用于實現(xiàn)內(nèi)存虛擬化。

之前,在學(xué)習(xí)保護模式的時候,我們了解了MMU(虛擬內(nèi)存管理器)是如何將虛擬地址轉(zhuǎn)換成物理地址的,那便是通過分頁模式,在XP系統(tǒng)中,我們學(xué)習(xí)了10-10-12分頁2-9-9-12分頁兩種分頁模式,EPT的作用與此非常像,它能夠?qū)uest的物理地址(Guest Physical Address, GPA)轉(zhuǎn)換成host的物理地址(Host Physical Address, HPA)。

開啟EPT后,真正的物理內(nèi)存就被隱藏起來了,Guest中的所有人都訪問不到,只有Host能訪問到。

關(guān)于EPT的詳細資料可以參考Intel開發(fā)手冊卷3第28節(jié)。

支持檢測

步驟:檢測IA32_VMX_PROCBASED_CTLS2 MSR(index 48BH)高32位的第2位,為1則表示支持。

9-9-9-9-12分頁

描述:EPT提供的分頁模式為9-9-9-9-12分頁,即最多支持48位地址的轉(zhuǎn)換,也就是256T內(nèi)存 。

以之前學(xué)過的2-9-9-12分頁模式為例,尋址流程大致如下:

關(guān)于2-9-9-12分頁模式的具體內(nèi)容可通過這篇文章復(fù)習(xí),連筆者自己也有點忘了。

再來看看9-9-9-9-12分頁模式的流程:

不難發(fā)現(xiàn),這兩者看上去差別不大,只是后者比前者多了一個目錄項,但實際上大有不同。

其中,EPTP的作用相當于Cr3,GPA通過它逐步找到HPA。

思考:VT是如何完成物理地址到物理地址之間的轉(zhuǎn)換的呢?

按照以往的經(jīng)驗,如果需要將虛擬地址轉(zhuǎn)換成物理地址,首先要知道這個虛擬地址是屬于誰的,也就是Cr3是多少,然后將虛擬地址按照分頁模式進行拆分,逐級讀取各個表項,最終找到相應(yīng)的物理頁。

但是在EPT模式下,Guest中的每個物理地址都經(jīng)過了虛擬化,因此,每訪問一個物理地址,就要經(jīng)過一次從GPA到HPA的轉(zhuǎn)換。

那也就是說,若系統(tǒng)使用的是2-9-9-12分頁模式,那么如果從想要找到真正的物理頁,一共要經(jīng)過三次從物理地址到物理地址的轉(zhuǎn)換,具體的過程由VMM實現(xiàn),我們只要了解其尋址原理即可。

第一次:PDPTE(GPA) -> PDPTE(HPA)
第二次:PDE(GPA) -> PDE(HPA)
第三次:PTE(GPA) -> PTE(HPA)

總尋址次數(shù) = 3*4 = 12次

實驗:EPT物理地址轉(zhuǎn)換

第一步:分配內(nèi)存,使其整體結(jié)構(gòu)成為9-9-9-9-12模式,并掛入相應(yīng)的物理頁。

//ept.c #include <ntddk.h> #define PAGE_SIZE 0x1000ULONG64* ept_PML4T;static PVOID *pagesToFree; static int index = 0;void InitEptPagesPool() {pagesToFree = ExAllocatePoolWithTag(NonPagedPool, 12*1024*1024, 'ept');if(!pagesToFree)__asm int 3RtlZeroMemory(pagesToFree, 12*1024*1024); }static ULONG64* AllocateOnePage() {PVOID page;page = ExAllocatePoolWithTag(NonPagedPool, PAGE_SIZE, 'ept');if(!page)__asm int 3RtlZeroMemory(page, PAGE_SIZE);pagesToFree[index] = page;index++;return (ULONG64 *)page; }ULONG64* MyEptInitialization() {ULONG64 *ept_PDPT, *ept_PDT, *ept_PT;PHYSICAL_ADDRESS FirstPtePA, FirstPdePA, FirstPdptePA;int a, b, c;InitEptPagesPool();ept_PML4T = AllocateOnePage();ept_PDPT = AllocateOnePage();FirstPdptePA = MmGetPhysicalAddress(ept_PDPT);*ept_PML4T = (FirstPdptePA.QuadPart) + 7;for (a = 0; a < 4; a++){ept_PDT = AllocateOnePage();FirstPdePA = MmGetPhysicalAddress(ept_PDT);*ept_PDPT = (FirstPdePA.QuadPart) + 7;ept_PDPT++;for (b = 0; b < 512; b++){ept_PT = AllocateOnePage();FirstPtePA = MmGetPhysicalAddress(ept_PT);*ept_PDT = (FirstPtePA.QuadPart) + 7;ept_PDT++;for (c = 0; c < 512; c++){*ept_PT = ((a << 30) | (b << 21) | (c << 12) | 0x37) & 0xFFFFFFFF;ept_PT++;}}}return ept_PML4T; }void MyEptFree() {int i;for (i = 0; i < index; i++) {ExFreePool(pagesToFree[i]);}ExFreePool(pagesToFree);index = 0; } //driver.c #include <ntddk.h> #include "vtasm.h" #include "vtsystem.h"VOID DriverUnload(PDRIVER_OBJECT pDriver) {StopVirtualTechnology();DbgPrint("Driver unload. \r\n"); }ULONG g_back_esp; ULONG g_back_eip;extern void InitEptPagesPool(); extern ULONG64* MyEptInitialization();NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver, PUNICODE_STRING reg_path) {DbgPrint("Driver load. \r\n");pDriver->DriverUnload = DriverUnload;InitEptPagesPool();ULONG64* ept_PML4T = MyEptInitialization();Log("ept_PML4T", ept_PML4T);__asm int 3;__asm{pushadpushfdmov g_back_esp, espmov g_back_eip, offset BACK}StartVirtualTechnology(); //開啟VTBACK:__asm{popfdpopad}//Log("Return To DriverEntry", 0);return STATUS_SUCCESS; }

第二步:運行驅(qū)動程序(注意,當Windbg獲取中斷時,此時并未開啟VT以及EPT模式)


第三步:讀取當前cr3和esp的值

第四步:獲取當前esp的物理地址作為GPA,下面嘗試將其轉(zhuǎn)換成HPA

第五步:將esp的物理地址拆分為9-9-9-9-12模式

二進制:00011110 11010110 10011100 01101100
9-9-9-9-12:000000000 000000000 011110110 101101001 110001101100
十六進制:000_000_0f6_169_c6c

第六步:定位PLM4E(注意,此時EPTP即ept_PLM4T指針是虛擬地址,里面的值才是物理地址)

這里PLM4E只有1項,因為XP系統(tǒng)物理內(nèi)存最大為4GB,因此一項就夠了

第七步:定位PDPTE(這個時候開始就是物理地址了,記得去掉屬性位)

第八步:定位PDE

第九步:定位PTE

第十步:定位物理內(nèi)存

物理頁中的內(nèi)容和ESP里的值相同,說明整個過程沒有問題。

總結(jié):不難發(fā)現(xiàn),GPA經(jīng)過轉(zhuǎn)換后得到的HPA沒有變化,但實際上,如果開啟EPT模式,當Guest和Host訪問同一個物理地址時,Guest只能對“虛擬的”物理內(nèi)存進行讀寫,只有Host才能訪問到真正的物理內(nèi)存。

參考資料

  • VT虛擬化架構(gòu)編寫視頻教程①~⑥課
  • 周鶴《VT技術(shù)入門》系列視頻教程
  • github項目:VT_Learn
  • github項目: HyperPlatform
  • Intel開發(fā)手冊 卷3:Chapter 23 ~ Chapter 33
  • x86內(nèi)部函數(shù)列表
  • 科普下VT EPT
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的Intel VT学习笔记(七)—— EPT物理地址转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: av免费在线电影 | 中文字幕一区二区三区手机版 | 中文字幕在线观看精品 | 男女啪啪十八 | 51国产在线| 久草免费在线 | 黄瓜视频色 | 亚洲最新偷拍 | 亚洲最大网 | 肉色超薄丝袜脚交69xx | 麻豆av影视| 好色先生视频污 | 农村寡妇一区二区三区 | 日本污网站 | 在线观看成人一区 | 久久久女人 | 亚洲国产网址 | 欧洲性生活片 | 五月婷婷视频 | 美日韩久久 | 亚洲一区二区三区四区五区午夜 | 久久精品国产亚洲7777 | 一级特黄aaa大片 | 免费99视频 | 日韩免费影视 | 国产精品嫩草影院av蜜臀 | 男人的天堂成人 | 国产成人在线电影 | 中文字幕欧美色图 | 国产精久久| 久久咪咪| 免费亚洲婷婷 | 能在线观看的av网站 | 国产综合社区 | 五月婷婷婷| 亚洲av成人精品一区二区三区在线播放 | 国产无遮挡免费 | 青娱乐福利视频 | 亚洲乱码国产一区三区 | 新91在线| 国产拍拍视频 | 亚洲综合图片区 | 老头吃奶性行交 | 免费在线观看av的网站 | 性av网 | 亚洲va韩国va欧美va精品 | 亚洲网在线观看 | 久久久精品一区 | 久久久久国色av免费观看性色 | 2024av| 超碰91在线观看 | 欧美三级影院 | 天天色影网| 今天高清视频在线观看视频 | 精品久久久久久中文字幕 | 久久九九国产视频 | 麻豆最新 | 国产伦精品一区二区三区免.费 | 色综合久久久久久 | 男人天堂va | 69视频在线看 | 少妇人妻偷人精品视频蜜桃 | 日韩中文在线观看 | 捆绑调教在线观看 | 亚洲视频国产精品 | 亚洲字幕av一区二区三区四区 | 精品九九在线 | 国产日韩欧美不卡 | 中文字幕人妻熟女在线 | 中文字幕免费在线看线人动作大片 | 口述3p做爰全过程 | 800av在线视频| 日韩夜夜| 亚洲美女一区二区三区 | 国产在线视频第一页 | 国产成人精品女人久久久 | 三年中文在线观看中文版 | 亚洲av人人夜夜澡人人 | 久久不射电影网 | 一本久道综合色婷婷五月 | 欧美在线中文字幕 | 色欲久久久天天天综合网精品 | 影音先锋中文字幕在线 | 久久久亚洲精品无码 | 成都4电影免费高清 | 欧美91精品久久久久国产性生爱 | 在线免费观看黄网站 | 人人妻人人澡人人爽欧美一区双 | 严厉高冷老师动漫播放 | 欧美日韩一区二区三区不卡视频 | 成年人免费观看网站 | 国产偷亚洲偷欧美偷精品 | 午夜免费播放观看在线视频 | 成人作爱视频 | 麻豆精品在线播放 | 日韩黄色片子 | 北条麻妃一区二区三区四区五区 | 亚色网站| 新红楼梦2005锦江版高清在线观看 |