!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.
-sommario
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. |
Gratuito |
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_FREE |
Memoria libera. Ciò include tutta la memoria che non è stata riservata. |
MEM_RESERVE |
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, !address Address 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).