簡體   English   中英

在Windows內核地址空間中將虛擬地址轉換為物理地址

[英]Translating virtual address to physical address in Windows kernel address space

對於Windows x64上的內核空間虛擬地址(VA> 0xFFFF000000000000 ),從虛擬地址到物理地址的轉換如何工作?

我知道它對用戶空間虛擬地址是如何工作的:VA由多個表中的多個索引組成,第一個(PML4)位於存儲在CR3寄存器中的物理地址(以及WinDbg中進程DirectoryTableBase “ DirBase”) 。 我猜這對於內核空間VA來說是相似的,但是他們的PML4表在哪里呢?

我的目標是在不依賴DbgEng / WinDbg API的情況下解析內核崩潰轉儲。 我已經知道每個內存頁在文件中的位置,但是轉儲文件中的大多數字段都在內核空間VA中表示。 該文件頭中的DirectoryTableBase字段與觸發崩潰的用戶空間進程相關,因此它無濟於事。

回答我自己的問題:每個(用戶空間)進程的PML4表確實包含內核空間VA的映射。 這非常違反直覺,因為這意味着操作系統在添加或刪除高級VA范圍時必須更新每個進程的PML4表。

附帶說明一下,如果您打算自己實現VA到PA的轉換,請考慮x64上虛擬頁面的大小可以是4 KB,2 MB或1 GB。 我忘記了,這就是為什么我被困住並問這個問題的原因-_-

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM