!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,因為某些目錄基底值不會以這種方式轉換。