!address
A extensão !address exibe informações sobre a memória usadas pelo processo de destino ou pelo computador de destino.
Modo de usuário
!address Address
!address -summary
!address [-f:F1,F2,...] {[-o:{csv | tsv | 1}] | [-c:"Command"]}
!address -? | -help
Modo kernel
!address Address
!address
Parâmetros
Endereço
Exibe apenas a região do espaço de endereço contendo Address.
-resumo
Exibe somente informações resumidas.
-f:F1, F2, ...
Exibe somente as regiões especificadas pelos filtros F1, F2 e assim por diante.
Os valores de filtro a seguir especificam regiões de memória pela forma como o processo de destino as utiliza.
Valor do filtro | Regiões de memória exibidas |
---|---|
VAR |
Regiões ocupadas. Essas regiões incluem todos os blocos de alocação virtual, o heap SBH, a memória de alocadores personalizados e todas as demais regiões do espaço de endereço que não se encaixam em outras classificações. |
Gratuita |
Memória livre. Isso inclui toda a memória que não foi reservada. |
Imagem |
Memória mapeada para um arquivo que faz parte de uma imagem executável. |
Pilha |
Memória usada para pilhas de threads. |
Teb |
Memória usada para TEBs (blocos de ambiente de thread). |
Peb |
Memória usada para o PEB (bloco de ambiente de processo). |
Heap |
Memória usada para heaps. |
PageHeap |
A região de memória usada para o heap de página inteira. |
CSR |
Memória CSR compartilhada. |
Actx |
Memória usada para dados de contexto de ativação. |
NLS |
Memória usada para tabelas NLS (suporte ao idioma nacional). |
FileMap |
Memória usada para arquivos mapeados em memória. Esse filtro é aplicável apenas durante a depuração ao vivo. |
Os valores de filtro a seguir especificam regiões de memória pelo tipo de memória.
Valor do filtro | Regiões de memória exibidas |
---|---|
MEM_IMAGE |
Memória mapeada para um arquivo que faz parte de uma imagem executável. |
MEM_MAPPED |
Memória mapeada para um arquivo que não faz parte de uma imagem executável. Isso inclui memória mapeada para o arquivo de paginação. |
MEM_PRIVATE |
Memória privada. Essa memória não é compartilhada por outros processos, nem mapeada para arquivos. |
Os valores de filtro a seguir especificam regiões de memória pelo estado da memória.
Valor do filtro | Regiões de memória exibidas |
---|---|
MEM_COMMIT |
Memória comprometida. |
MEM_FREE |
Memória livre. Isso inclui toda a memória que não foi reservada. |
MEM_RESERVE |
Memória reservada. |
Os valores de filtro a seguir especificam regiões de memória pela proteção aplicada à memória.
Valor do filtro | Regiões de memória exibidas |
---|---|
PAGE_NOACCESS |
Memória não acessável. |
PAGE_READONLY |
Memória que é legível, mas não é gravável e não executável. |
PAGE_READWRITE |
Memória legível e gravável, mas não executável. |
PAGE_WRITECOPY |
Memória que tem comportamento de cópia na gravação. |
PAGE_EXECUTE |
Memória executável, mas não legível nem gravável. |
PAGE_EXECUTE_READ |
Memória executável e legível, mas não gravável. |
PAGE_EXECUTE_READWRITE |
Memória executável, legível e gravável. |
PAGE_EXECUTE_WRITECOPY |
Memória executável e com comportamento de cópia na gravação. |
PAGE_GUARD |
Memória que opera como uma página de proteção. |
PAGE_NOCACHE |
Memória não armazenada em cache. |
PAGE_WRITECOMBINE |
Memória com acesso habilitado para combinação de gravação. |
-o:{csv | tsv | 1}
Exibe a saída de acordo com uma das opções a seguir.
Opção | Formato da saída |
---|---|
csv |
Exibe a saída com valores separados por vírgula. |
tsv |
Exibe a saída com valores separados por tabulação. |
1 |
Exibe a saída em formato básico. Esse formato funciona bem quando o !address é usado como entrada para .foreach. |
-c:"Comando"
Executa um comando personalizado para cada região de memória. Você pode usar os espaços reservados a seguir em seu comando para representar campos de saída da extensão !address.
Espaço reservado | Campo de saída |
---|---|
%1 |
Endereço básico |
%2 |
Endereço final + 1 |
%3 |
Tamanho da região |
4% |
Tipo |
5% |
Estado |
%6 |
Proteção |
%7 |
Uso |
Por exemplo, !address -f:Heap -c:".echo %1 %3 %5"
exibe o endereço básico, o tamanho e o estado de cada região de memória do tipo Heap.
As aspas no comando devem ser precedidas por uma barra invertida (\"). Por exemplo, !address -f:Heap -c:"s -a %1 %2 \"pad\"" pesquisa cada região de memória do tipo Heap para a cadeia de caracteres "pad".
Não há suporte a vários comandos separados por ponto e vírgula.
-?
Exibe um texto mínimo de ajuda para essa extensão na janela Comando do Depurador.
DLL
Ext.dll
Informações Adicionais
Para saber mais sobre como exibir e pesquisar memória, confira Leitura e gravação de memória. Para extensões adicionais que exibem propriedades de memória, confira !vm (modo kernel) e !vprot (modo de usuário).
Comentários
Sem parâmetros, a extensão !address exibe informações sobre todo o espaço de endereço inteiro. O comando !address -summary mostra somente o resumo.
No modo kernel, essa extensão pesquisa apenas a memória do kernel, mesmo que você tenha usado .process (Definir contexto do processo) para especificar o espaço de endereço virtual de um processo específico. No modo de usuário, a extensão !address sempre se refere à memória que o processo de destino possui.
No modo de usuário, !address Address mostra as características da região à qual o endereço especificado pertence. Sem parâmetros, o !address mostra as características de todas as regiões de memória. Entre as características estão o uso de memória, o tipo de memória, o estado de memória e a proteção de memória. Para saber mais sobre o significado dessas informações, confira as tabelas anteriores na descrição do parâmetro -f.
O exemplo a seguir usa o !address para recuperar informações sobre uma região de memória mapeada para kernel32.dll.
0:000> !address 75831234
Usage: Image
Base Address: 75831000
End Address: 758f6000
Region Size: 000c5000
Type: 01000000MEM_IMAGE
State: 00001000MEM_COMMIT
Protect: 00000020PAGE_EXECUTE_READ
More info: lmv m kernel32
More info: !lmi kernel32
More info: ln 0x75831234
Este exemplo usa um valor Address de 0x75831234. A exibição mostra que esse endereço está em uma região de memória que inicia com o endereço 0x75831000 e termina com o endereço 0x758f6000. A região tem uso de Imagem, tipo MEM_IMAGE, estado MEM_COMMIT e proteção PAGE_EXECUTE_READ. (Para saber mais sobre o significado desses valores, confira as tabelas anteriores.) A exibição também lista outros três comandos do depurador a serem usados para conhecer melhor esse endereço de memória.
Se você inicia com um endereço e tenta determinar informações sobre ele, as informações de uso costumam ser as mais valiosas. Após saber o uso, você pode usar extensões adicionais para conhecer melhor essa memória. Por exemplo, se o uso for Heap, para saber mais, você poderá usar a extensão !heap.
O exemplo a seguir usa o comando s (Pesquisar Memória) para pesquisar cada região de memória do tipo Imagem para a cadeia de caracteres largos "Note".
!address /f:Image /c:"s -u %1 %2 \"Note\""
*** Executing: s -u 0xab0000 0xab1000 "Note"
*** Executing: s -u 0xab1000 0xabc000 "Note"
00ab2936 004e 006f 0074 0065 0070 0061 0064 0000 N.o.t.e.p.a.d...
00ab2f86 004e 006f 0074 0065 0070 0061 0064 005c N.o.t.e.p.a.d.\.
00ab32e4 004e 006f 0074 0065 0070 0061 0064 0000 N.o.t.e.p.a.d...
*** Executing: s -u 0xabc000 0xabd000 "Note"
. . .
No modo kernel, a saída de !address é similar à saída do modo de usuário, mas com menos informações. O exemplo a seguir mostra a saída do modo kernel.
kd> !address
804de000 - 00235000
Usage KernelSpaceUsageImage
ImageName ntoskrnl.exe
80c00000 - 001e1000
Usage KernelSpaceUsagePFNDatabase
....
f85b0000 - 00004000
Usage KernelSpaceUsageKernelStack
KernelStack 817b4da0 : 324.368
f880d000 - 073d3000
Usage KernelSpaceUsageNonPagedPoolExpansion
O significado de "uso" é equivalente no modo de usuário. "ImageName" indica o módulo que está associado a este endereço. "KernelStack" mostra o endereço do bloco ETHREAD (0x817B4DA0), a ID do processo (0x324) e a ID do thread (0x368).