!vtop
L'estensione !vtop converte un indirizzo virtuale nell'indirizzo fisico corrispondente e visualizza altre informazioni sulla tabella di pagine e sulla directory di pagine.
Sintassi
!vtop PFN VirtualAddress
!vtop 0 VirtualAddress
Parametri
DirBase
Specifica la base di directory per il processo. Ogni processo ha un proprio spazio indirizzi virtuale. Usare l'estensione !process per determinare la base di directory per un processo.
PFN
Specifica il numero di frame di pagina (PFN) della base di directory per il processo.
0
Fa sì che !vtop usi il contesto del processo corrente per la conversione degli indirizzi.
VirtualAddress
Specifica l'indirizzo virtuale di cui si desidera la pagina.
DLL
Kdexts.dll
Informazioni aggiuntive
Per altri metodi per ottenere questi risultati, vedere Conversione di indirizzi virtuali in indirizzi fisici. Vedi anche !ptov. Per informazioni sulle tabelle di pagine e sulle directory di pagine, vedere Microsoft Windows Internals, di Mark Russinovich e David Solomon.
Osservazioni:
Per usare questo comando, usare prima di tutto l'estensione !process per determinare la base di directory del processo. Il numero di frame di pagina (PFN) di questa base di directory è reperibile rimuovendo i tre zeri esadecimali finali (in altre parole, spostando a destra il numero a 12 bit).
Ecco un esempio:
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
Poiché la base di directory è 0x098FD000, il relativo pfn è 0x098FD.
kd> !vtop 98fd 12f980
Pdi 0 Pti 12f
0012f980 09de9000 pfn(09de9)
Si noti che i tre zeri finali sono facoltativi. L'estensione !vtop visualizza l'indice della directory della pagina (PDI), l'indice della tabella di pagina (PTI), l'indirizzo virtuale di input originariamente, l'indirizzo fisico dell'inizio della pagina fisica e il numero di frame di pagina (PFN) della voce della tabella di pagina (PTE).
Se si desidera convertire l'indirizzo virtuale 0x0012F980 in un indirizzo fisico, è sufficiente prendere le ultime tre cifre esadecimali (0x980) e aggiungerle all'indirizzo fisico dell'inizio della pagina (0x09DE9000). In questo modo l'indirizzo fisico 0x09DE9980.
Se si dimentica di rimuovere i tre zeri e passare la base di directory completa a !vtop invece del pfn, i risultati saranno in genere corretti. Questo perché quando !vtop riceve un numero troppo grande per essere un PFN, sposta a destra dodici bit e usa invece quel numero:
kd> !vtop 98fd 12f980
Pdi 0 Pti 12f
0012f980 09de9000 pfn(09de9)
kd> !vtop 98fd000 12f980
Pdi 0 Pti 12f
0012f980 09de9000 pfn(09de9)
Tuttavia, è preferibile usare sempre il pfn, perché alcuni valori di base della directory non verranno convertiti in questo modo.