!vtop
A extensão !vtop converte um endereço virtual no endereço físico correspondente e exibe outras informações de tabela de página e diretório de página.
Sintaxe
!vtop PFN VirtualAddress
!vtop 0 VirtualAddress
Parâmetros
DirBase
Especifica a base de diretório do processo. Cada processo tem seu próprio espaço de endereço virtual. Use a extensão !process para determinar a base de diretório de um processo.
PFN
Especifica o número de quadros de página (PFN) da base de diretório do processo.
0
Faz com que !vtop use o contexto do processo atual para a conversão de endereços.
Endereço virtual
Especifica o endereço virtual cuja página é desejada.
DLL
Kdexts.dll
Informações Adicionais
Para conhecer outros métodos de obter esses resultados, consulte Convertendo endereços virtuais em endereços físicos. Consulte também !ptov. Para obter informações sobre tabelas de página e diretórios de página, consulte Microsoft Windows Internals, de Mark Russinovich e David Solomon.
Comentários
Para usar esse comando, primeiro use a extensão !process para determinar a base de diretório do processo. O número de quadros de página (PFN) dessa base de diretório pode ser encontrado removendo os três zeros hexadecimais à direita (ou seja, deslocando o número 12 bits para a direita).
Este é um exemplo:
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
Como a base de diretório é 0x098FD000, o PFN é 0x098FD.
kd> !vtop 98fd 12f980
Pdi 0 Pti 12f
0012f980 09de9000 pfn(09de9)
Observe como os três zeros à direita são opcionais. A extensão !vtop exibe o índice de diretórios de página (PDI), o índice de tabelas de página (PTI), o endereço virtual que você digitou originalmente, o endereço físico do início da página física e o número de quadros de página (PFN) da entrada de tabela de página (PTE).
Se você quiser converter o endereço virtual 0x0012F980 em um endereço físico, basta pegar os últimos três dígitos hexadecimais (0x980) e adicioná-los ao endereço físico do início da página (0x09DE9000). Isso resulta no endereço físico 0x09DE9980.
Se você esquecer de remover os três zeros e passar a base de diretório completa para !vtop em vez do PFN, os resultados geralmente estarão corretos. Isso ocorre porque, quando !vtop recebe um número muito grande para ser um PFN, ele o desloca para a direita doze bits e usa esse número:
kd> !vtop 98fd 12f980
Pdi 0 Pti 12f
0012f980 09de9000 pfn(09de9)
kd> !vtop 98fd000 12f980
Pdi 0 Pti 12f
0012f980 09de9000 pfn(09de9)
No entanto, é melhor sempre usar o PFN porque alguns valores da base de diretório não serão convertidos dessa maneira.