!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).