!vtop
!vtop 延伸模組會將虛擬位址轉換成對應的實體位址,並顯示其他頁面數據表和頁面目錄資訊。
語法
!vtop PFN VirtualAddress
!vtop 0 VirtualAddress
參數
DirBase
指定進程的目錄基底。 每個進程都有自己的虛擬位址空間。 使用 !process 擴充功能來判斷進程的目錄基底。
PFN
指定程序目錄基底的頁面框架編號 (PFN)。
0
導致 !vtop 使用目前 進程內容 進行地址轉譯。
VirtualAddress
指定想要其頁面的虛擬位址。
DLL
Kdexts.dll
其他資訊
如需達成這些結果的其他方法,請參閱 將虛擬位址轉換成實體位址。 另請參閱 !ptov。 如需頁面數據表和頁面目錄的相關信息,請參閱 Mark Russinovich 和 David 所羅門Microsoft Windows 內部。
備註
若要使用此命令,請先使用 !process 擴充功能來判斷進程的目錄基底。 拿掉三個尾端十六進位零,即可找到此目錄基底的頁面框架編號(PFN),也就是將數位 12 位向右移。
以下是範例:
kd> !process 0 0
**** NT ACTIVE PROCESS DUMP ****
....
PROCESS ff779190 SessionId: 0 Cid: 04fc Peb: 7ffdf000 ParentCid: 0394
DirBase: 098fd000 ObjectTable: e1646b30 TableSize: 8.
Image: MyApp.exe
由於目錄基底0x098FD000,因此其 PFN 會0x098FD。
kd> !vtop 98fd 12f980
Pdi 0 Pti 12f
0012f980 09de9000 pfn(09de9)
請注意尾端三個零是選擇性的。 !vtop 延伸模組會顯示頁面目錄索引 (PDI)、頁面數據表索引 (PTI)、您原本輸入的虛擬位址、實體頁面開頭的實體位址,以及頁面表格專案 (PTE) 的頁面框架號碼 (PFN)。
如果您想要將虛擬位址0x0012F980轉換為實體位址,只需要取得最後三個十六進位數位(0x980),並將其新增至頁面開頭的實體位址(0x09DE9000)。 這會提供實體位址0x09DE9980。
如果您忘記移除三個零,並將完整目錄基底傳遞至 !vtop ,而不是 PFN,則結果通常會正確。 這是因為當 !vtop 收到數位太大而無法成為 PFN 時,它會將它右移 12 位,並改用該數位:
kd> !vtop 98fd 12f980
Pdi 0 Pti 12f
0012f980 09de9000 pfn(09de9)
kd> !vtop 98fd000 12f980
Pdi 0 Pti 12f
0012f980 09de9000 pfn(09de9)
不過,最好一律使用 PFN,因為某些目錄基底值不會以這種方式轉換。