!Indirizzo

L'estensione !address visualizza informazioni sulla memoria usata dal processo di destinazione o dal computer di destinazione.

Modalità utente

!address Address
!address -summary 
!address [-f:F1,F2,...] {[-o:{csv | tsv | 1}] | [-c:"Command"]}
!address -? | -help

Modalità kernel

!address Address 
!address

Parametri

Indirizzo
Visualizza solo l'area dello spazio indirizzi che contiene l'indirizzo.

-Riepilogo
Visualizza solo le informazioni di riepilogo.

-f:F1, F2, ...
Visualizza solo le aree specificate dai filtri F1, F2 e così via.

I valori di filtro seguenti specificano le aree di memoria nel modo in cui il processo di destinazione li usa.

Valore del filtro Aree di memoria visualizzate

VAR

Aree occupate. Queste aree includono tutti i blocchi di allocazione virtuale, l'heap SBH, la memoria dagli allocatori personalizzati e tutte le altre aree dello spazio indirizzi che non rientrano in altre classificazioni.

Libero

Memoria libera. Ciò include tutta la memoria che non è stata riservata.

Immagine

Memoria mappata a un file che fa parte di un'immagine eseguibile.

Stack

Memoria usata per gli stack di thread.

Teb

Memoria usata per i blocchi di ambiente thread (TEB).

Peb

Memoria usata per il blocco di ambiente del processo (PEB).

Heap

Memoria usata per gli heap.

PageHeap

Area di memoria usata per l'heap a pagina intera.

CSR

Memoria condivisa csr.

Actx

Memoria utilizzata per i dati del contesto di attivazione.

NLS

Memoria utilizzata per le tabelle NLS (National Language Support).

FileMap

Memoria utilizzata per i file mappati alla memoria. Questo filtro è applicabile solo durante il debug in tempo reale.

I valori di filtro seguenti specificano le aree di memoria in base al tipo di memoria.

Valore del filtro Aree di memoria visualizzate

MEM_IMAGE

Memoria mappata a un file che fa parte di un'immagine eseguibile.

MEM_MAPPED

Memoria mappata a un file che non fa parte di un'immagine eseguibile. Ciò include la memoria mappata al file di paging.

MEM_PRIVATE

Memoria privata. Questa memoria non è condivisa da alcun altro processo e non viene mappata ad alcun file.

I valori di filtro seguenti specificano le aree di memoria in base allo stato della memoria.

Valore del filtro Aree di memoria visualizzate

MEM_COMMIT

Memoria di cui è stato eseguito il commit.

MEM_FR edizione Enterprise

Memoria libera. Ciò include tutta la memoria che non è stata riservata.

MEM_RE edizione Standard RVE

Memoria riservata.

I valori di filtro seguenti specificano le aree di memoria in base alla protezione applicata alla memoria.

Valore del filtro Aree di memoria visualizzate

PAGE_NOACCESS

Memoria a cui non è possibile accedere.

PAGE_READONLY

Memoria leggibile, ma non scrivibile e non eseguibile.

PAGE_READWRITE

Memoria leggibile e scrivibile, ma non eseguibile.

PAGE_WRITECOPY

Memoria con comportamento di copia su scrittura.

PAGE_EXECUTE

Memoria eseguibile, ma non leggibile e non scrivibile.

PAGE_EXECUTE_READ

Memoria eseguibile e leggibile, ma non scrivibile.

PAGE_EXECUTE_READWRITE

Memoria eseguibile, leggibile e scrivibile.

PAGE_EXECUTE_WRITECOPY

Memoria eseguibile e comportamento di copia su scrittura.

PAGE_GUARD

Memoria che funge da pagina di protezione.

PAGE_NOCACHE

Memoria non memorizzata nella cache.

PAGE_WRITECOMBINE

Memoria con accesso combinato in scrittura abilitato.

-o:{csv | tsv | 1}
Visualizza l'output in base a una delle opzioni seguenti.

Opzione Formato di output

csv

Visualizza l'output come valori delimitati da virgole.

tsv

Visualizza l'output come valori delimitati da tabulazioni.

1

Visualizza l'output in formato bare. Questo formato funziona bene quando !address viene usato come input per .foreach.

-c:"Command"
Esegue un comando personalizzato per ogni area di memoria. È possibile usare i segnaposto seguenti nel comando per rappresentare i campi di output dell'estensione !address .

Segnaposto Campo Output

%1

Indirizzo di base

2%

Indirizzo finale + 1

%3

Dimensioni area

4%

Type

%5

Provincia

%6

Protezione

7%

Utilizzo

Ad esempio, !address -f:Heap -c:".echo %1 %3 %5" visualizza l'indirizzo di base, le dimensioni e lo stato per ogni area di memoria di tipo Heap.

Le virgolette nel comando devono essere precedute da una barra rovesciata (\"). Ad esempio, !address -f:Heap -c:"s -a %1 %2 \"pad\"" cerca in ogni area di memoria di tipo Heap la stringa "pad".

Non sono supportati più comandi separati da punti e virgola.

-?
Visualizza il testo minimo della Guida per questa estensione nella finestra Comando debugger.

DLL

Ext.dll

Informazioni aggiuntive

Per altre informazioni su come visualizzare e cercare memoria, vedere Lettura e scrittura di memoria. Per altre estensioni che visualizzano le proprietà di memoria, vedere !vm (modalità kernel) e !vprot (modalità utente).

Osservazioni:

Senza parametri, l'estensione !address visualizza informazioni sull'intero spazio indirizzi. Il comando !address -summary mostra solo il riepilogo.

In modalità kernel, questa estensione cerca solo la memoria del kernel, anche se è stato usato .process (Set Process Context) per specificare lo spazio indirizzi virtuale di un determinato processo. In modalità utente, l'estensione !address fa sempre riferimento alla memoria di proprietà del processo di destinazione.

In modalità utente, !addressAddress mostra le caratteristiche dell'area a cui appartiene l'indirizzo specificato. Senza parametri, !address mostra le caratteristiche di tutte le aree di memoria. Queste caratteristiche includono l'utilizzo della memoria, il tipo di memoria, lo stato della memoria e la protezione della memoria. Per altre informazioni sul significato di queste informazioni, vedere le tabelle precedenti nella descrizione del parametro -f .

Nell'esempio seguente viene usato !address per recuperare informazioni su un'area di memoria mappata a 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

In questo esempio viene utilizzato un valore Address di 0x75831234. La visualizzazione mostra che questo indirizzo si trova in un'area di memoria che inizia con l'indirizzo 0x75831000 e termina con l'indirizzo 0x758f6000. L'area dispone di immagine di utilizzo, tipo MEM_IMAGE, MEM_COMMIT di stato e protezione PAGE_EXECUTE_READ. Per altre informazioni sul significato di questi valori, vedere le tabelle precedenti. La visualizzazione elenca anche altri tre comandi del debugger che è possibile usare per ottenere altre informazioni su questo indirizzo di memoria.

Se si inizia con un indirizzo e si tenta di determinare le informazioni su di esso, le informazioni sull'utilizzo sono spesso il più prezioso. Dopo aver appreso l'utilizzo, è possibile usare estensioni aggiuntive per altre informazioni su questa memoria. Ad esempio, se l'utilizzo è Heap, è possibile usare l'estensione !heap per altre informazioni.

Nell'esempio seguente viene usato il comando s (Search Memory) per cercare in ogni area di memoria di tipo Image la stringa di caratteri wide "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"
. . .

In modalità kernel, l'output di !address è simile all'output in modalità utente, ma contiene meno informazioni. L'esempio seguente mostra l'output in modalità 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

Il significato di "utilizzo" è uguale a quello in modalità utente. "ImageName" indica il modulo associato a questo indirizzo. "KernelStack" mostra l'indirizzo del blocco ETHREAD del thread (0x817B4DA0), l'ID del processo (0x324) e l'ID del thread (0x368).