日韩性视频-久久久蜜桃-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大帝在线观看 | 午夜视频一区二区 | 日本精品入口免费视频 | 综合网伊人 | 自拍偷拍999| 天海翼av| 91狠狠综合 | 日韩成人中文字幕 | 欧美一区二区性久久久 | 亚色视频在线 | 麻豆精品在线观看 | 免费日韩成人 | av大帝| 亚久久| 日韩精品在线不卡 | 色婷婷综合网 | 国产一级一片免费播放放a 丁香六月色 | 91精品国产综合久久久蜜臀九色 | 黄色一级片黄色一级片 | 九色tv| 国产精品国产精品国产专区不卡 | 国产女人水真多18毛片18精品 | 韩国精品一区二区三区 | 日本少妇电影 | 91sex国产 | 日本一区欧美 | 中文字幕在线观看线人 | 成人av电影在线播放 | 乱短篇艳辣500篇h文最新章节 | 国产嘿咻| 色网在线免费观看 | 在线观看91视频 | 亚洲综合色吧 | 免费黄色大片 | av2014天堂网| 波多野结衣亚洲一区 | 色老头一区二区三区 | 日韩精品一区二区三区国语自制 | 操操日日 | 草莓视频在线观看入口w | 亚洲欧美中文字幕 | 天天综合入口 | 免费久久视频 | 一级黄色片在线播放 | 人人草人 | 欧美wwwxxxx| 8050午夜一级毛片久久亚洲欧 | 日韩aⅴ在线观看 | 波多野结衣在线观看一区二区三区 | 久久黄网| 午夜一级免费 | 女人舌吻男人茎视频 | 亚洲每日在线 | 黄色网址在线视频 | 国产日本在线播放 | 久久无码视频一区 | 自慰无码一区二区三区 | 日韩草比| 久久精品一区二区在线观看 | 人人干人人澡 | 久久人人澡 | 天堂а√在线最新版中文在线 | 精品少妇3p| 女女同性被吸乳羞羞 | 夜夜爽夜夜叫夜夜高潮漏水 | 免费看黄在线网站 | 久草视频在线资源 | 大地资源高清播放在线观看 | 天天综合在线视频 | 欧美一级片网址 | 黄色免费在线视频 | 亚洲a成人| 悠悠色综合 | 噼里啪啦免费高清看 | 91久久 | 成人激情小视频 | 亚洲色图图片 | 欧美成人三级在线 | 91性高潮久久久久久久久 | av大片在线看 | av在线资源播放 | 日本一级黄色大片 | 午夜视频在线观看一区二区 | 亚洲精品国产福利 | 干骚视频 | 性色av蜜臀av色欲av | 国产一区二区精品久久 | 韩国视频一区 | 日本一区二区三区成人 | 亚洲啊啊啊啊啊 | 国产精品久久久久久久久久东京 | 亚洲超碰av | 麻豆蜜桃视频 | 国产亚洲欧美日韩高清 | 黄色av网站在线免费观看 | 黄色一级淫片 | 黄色免费在线视频 | 精品久久91 | 国产13页|