!vtop
Die Erweiterung !vtop wandelt eine virtuelle Adresse in die entsprechende physikalische Adresse um und zeigt weitere Informationen zur Seitentabelle und zum Seitenverzeichnis an.
Syntax
!vtop PFN VirtualAddress
!vtop 0 VirtualAddress
Parameter
DirBase
Gibt die Verzeichnisbasis für den Prozess an. Jeder Prozess hat seinen eigenen virtuellen Adressraum. Verwenden Sie die Erweiterung !process, um die Verzeichnisbasis für einen Prozess zu bestimmen.
PFN
Gibt die Kachelnummer (PFN) der Verzeichnisbasis für den Prozess an.
0
Bewirkt, dass !vtop den aktuellen Prozesskontext für die Adressübersetzung verwendet.
VirtualAddress
Gibt die virtuelle Adresse an, deren Seite gewünscht wird.
DLL
Kdexts.dll
Zusätzliche Informationen
Weitere Methoden, um diese Ergebnisse zu erzielen, finden Sie unter Konvertieren virtueller Adressen in physikalische Adressen. Siehe auch !ptov. Informationen über Seitentabellen und Seitenverzeichnisse finden Sie unter Microsoft Windows Internals, von Mark Russinovich und David Solomon.
Hinweise
Um diesen Befehl zu verwenden, verwenden Sie zunächst die Erweiterung !process, um die Verzeichnisbasis des Prozesses zu ermitteln. Die Kachelnummer (PFN) dieser Verzeichnisbasis lässt sich ermitteln, indem die drei hinteren hexadezimalen Nullen entfernt werden (mit anderen Worten, indem die Zahl um 12 Bit nach rechts verschoben wird).
Hier ist ein Beispiel:
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
Da die Verzeichnisbasis 0x098FD000 ist, lautet die PFN 0x098FD.
kd> !vtop 98fd 12f980
Pdi 0 Pti 12f
0012f980 09de9000 pfn(09de9)
Beachten Sie, dass die drei Nullen am Ende optional sind. Die Erweiterung !vtop zeigt den Seitenverzeichnisindex (PDI), den Seitentabellenindex (PTI), die ursprünglich eingegebene virtuelle Adresse, die physikalische Adresse des Anfangs der physikalischen Seite und die Kachelnummer (PFN) des Seitentabelleneintrags (PTE) an.
Wenn Sie die virtuelle Adresse 0x0012F980 in eine physikalische Adresse umwandeln wollen, müssen Sie einfach die letzten drei hexadezimalen Ziffern (0x980) zur physikalischen Adresse am Anfang der Seite (0x09DE9000) addieren. Dies ergibt die physikalische Adresse 0x09DE9980.
Wenn Sie vergessen, die drei Nullen zu entfernen, und statt der PFN die vollständige Verzeichnisbasis an !vtop übergeben, sind die Ergebnisse normalerweise korrekt. Wenn !vtop eine Zahl empfängt, die für eine PFN zu groß ist, verschiebt es sie um zwölf Bits nach rechts und verwendet stattdessen diese Zahl:
kd> !vtop 98fd 12f980
Pdi 0 Pti 12f
0012f980 09de9000 pfn(09de9)
kd> !vtop 98fd000 12f980
Pdi 0 Pti 12f
0012f980 09de9000 pfn(09de9)
Es ist jedoch besser, immer die PFN zu verwenden, da einige Verzeichnisbasiswerte auf diese Weise nicht umgewandelt werden.