!vtop
Расширение !vtop преобразует виртуальный адрес в соответствующий физический адрес и отображает другие сведения о таблице страниц и каталоге страниц.
Синтаксис
!vtop PFN VirtualAddress
!vtop 0 VirtualAddress
Параметры
DirBase
Указывает базу каталогов для процесса. Каждый процесс имеет собственное виртуальное адресное пространство. Используйте расширение !process, чтобы определить базу каталогов для процесса.
PFN
Указывает номер кадра страницы (PFN) базы каталога для процесса.
0
Заставляет !vtop использовать текущий контекст процесса для преобразования адресов.
VirtualAddress
Указывает виртуальный адрес, страница которого является требуемой.
DLL-библиотеки
Kdexts.dll
Дополнительная информация
Другие методы достижения этих результатов см. в разделе "Преобразование виртуальных адресов в физические адреса". Также см. !ptov. Сведения о таблицах страниц и каталогах страниц см. в разделе "Внутренние компоненты 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), виртуальный адрес, который вы изначально ввели, физический адрес начала физической страницы и номер кадра страницы (PFN) записи таблицы страницы (PTE).
Если вы хотите преобразовать виртуальный адрес 0x0012F980 в физический адрес, необходимо просто взять последние три шестнадцатеричные цифры (0x980) и добавить их в физический адрес начала страницы (0x09DE9000). Это дает физический адрес 0x09DE9980.
Если вы забыли удалить три нуля и передайте полную базу каталогов на !vtop вместо PFN, результаты обычно будут правильными. Это связано с тем, что если !vtop получает слишком большое число, чтобы быть PFN, он справа сдвигает его двенадцать битов и использует это число вместо этого:
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, так как некоторые базовые значения каталога не будут преобразованы таким образом.