[英]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.