!address
Die Erweiterung !address zeigt Informationen über den Speicher an, den der Zielprozess oder Zielcomputer verwendet.
Benutzermodus
!address Address
!address -summary
!address [-f:F1,F2,...] {[-o:{csv | tsv | 1}] | [-c:"Command"]}
!address -? | -help
Kernelmodus
!address Address
!address
Parameter
Adresse
Zeigt nur die Region des Adressraums an, der Address enthält.
-Zusammenfassung
Zeigt nur zusammenfassende Informationen an.
-f:F1, F2, ...
Zeigt nur die Regionen an, die durch die Filter F1, F2 usw. angegeben sind.
Die folgenden Filterwerte geben Speicherregionen nach der Art und Weise an, wie der Zielprozess sie verwendet.
Filterwert | Angezeigte Speicherregionen |
---|---|
VAR |
Belegte Regionen. Zu diesen Regionen gehören alle virtuellen Zuordnungsblöcke, der SBH-Heap, Speicher von benutzerdefinierten Zuweisern und alle anderen Regionen des Adressraums, die in keine andere Klassifizierung fallen. |
Free |
Freier Speicher. Dazu gehört der gesamte nicht reservierte Speicher. |
Image |
Speicher, der auf eine Datei abgebildet wird, die Teil eines ausführbaren Images ist. |
Stack |
Für Threadstapel verwendeter Speicher. |
Teb |
Speicher, der für Threadumgebungsblöcke (Thread Environment Blocks, TEBs) verwendet wird. |
Peb |
Speicher, der für den Prozessumgebungsblock (Process Environment Block, PEB) verwendet wird. |
Heap |
Für Heaps verwendeter Speicher. |
PageHeap |
Die für den Ganzseiten-Heap verwendete Speicherregion. |
CSR |
Gemeinsamer genutzter CSR-Speicher. |
Actx |
Speicher, der für Aktivierungskontextdaten verwendet wird. |
NLS |
Speicher, der für die Tabellen von National Language Support (NLS) verwendet wird. |
FileMap |
Speicher, der für im Speicher abgebildete Dateien verwendet wird. Dieser Filter ist nur während des Live-Debuggens anwendbar. |
Die folgenden Filterwerte geben Speicherregionen nach dem Speichertyp an.
Filterwert | Angezeigte Speicherregionen |
---|---|
MEM_IMAGE |
Speicher, der auf eine Datei abgebildet wird, die Teil eines ausführbaren Images ist. |
MEM_MAPPED |
Speicher, der auf eine Datei abgebildet wird, die nicht Teil eines ausführbaren Images ist. Dazu gehört auch Speicher, der auf die Auslagerungsdatei abgebildet wird. |
MEM_PRIVATE |
Privater Speicher. Dieser Speicher wird von keinem anderen Prozess genutzt und wird auf keine Datei abgebildet. |
Die folgenden Filterwerte geben Speicherregionen nach dem Zustand des Speichers an.
Filterwert | Angezeigte Speicherregionen |
---|---|
MEM_COMMIT |
Festgelegter Speicher. |
MEM_FREE |
Freier Speicher. Dazu gehört der gesamte nicht reservierte Speicher. |
MEM_RESERVE |
Reservierter Speicher. |
Die folgenden Filterwerte geben Speicherregionen nach dem auf den Speicher angewendeten Schutz an.
Filterwert | Angezeigte Speicherregionen |
---|---|
PAGE_NOACCESS |
Speicher, auf den nicht zugegriffen werden kann. |
PAGE_READONLY |
Speicher, der lesbar, aber nicht beschreibbar und nicht ausführbar ist. |
PAGE_READWRITE |
Speicher, der lesbar und beschreibbar ist, aber nicht ausgeführt werden kann. |
PAGE_WRITECOPY |
Speicher, der ein „Kopie bei Schreibvorgang“-Verhalten aufweist. |
PAGE_EXECUTE |
Speicher, der ausführbar, aber nicht lesbar und nicht beschreibbar ist. |
PAGE_EXECUTE_READ |
Speicher, der ausführbar und lesbar, aber nicht beschreibbar ist. |
PAGE_EXECUTE_READWRITE |
Speicher, der ausführbar, lesbar und beschreibbar ist. |
PAGE_EXECUTE_WRITECOPY |
Speicher, der ausführbar ist und „Kopie bei Schreibvorgang“-Verhalten aufweist. |
PAGE_GUARD |
Speicher, der als Schutzseite fungiert. |
PAGE_NOCACHE |
Speicher, der nicht zwischengespeichert wird. |
PAGE_WRITECOMBINE |
Speicher, bei dem der kombinierte Schreibzugriff aktiviert ist. |
-o:{csv | tsv | 1}
Zeigt die Ausgabe gemäß einer der folgenden Optionen an.
Option | Ausgabeformat |
---|---|
csv |
Zeigt die Ausgabe als kommagetrennte Werte an. |
tsv |
Zeigt die Ausgabe als tabulatorgetrennte Werte an. |
1 |
Zeigt die Ausgabe im reinen Format an. Dieses Format funktioniert gut, wenn !address als Eingabe für .foreach verwendet wird. |
-c:"Command"
Führt für jede Speicherregion einen benutzerdefinierten Befehl aus. Sie können die folgenden Platzhalter in Ihrem Befehl verwenden, um Ausgabefelder der Erweiterung !address darzustellen.
Platzhalter | Ausgabefeld |
---|---|
%1 |
Basisadresse |
%2 |
Endadresse + 1 |
%3 |
Größe der Region |
%4 |
Typ |
%5 |
Status |
%6 |
Schutz |
%7 |
Nutzung |
Zum Beispiel zeigt !address -f:Heap -c:".echo %1 %3 %5"
die Basisadresse, die Größe und den Status für jede Speicherregion vom Typ Heap an.
Den Anführungszeichen im Befehl muss ein umgekehrter Schrägstrich (\") vorangestellt werden. Zum Beispiel durchsucht !address -f:Heap -c: "s -a %1 %2 \"pad\"" jede Speicherregion vom Typ Heap nach der Zeichenfolge „pad“.
Mehrere durch Semikolon getrennte Befehle werden nicht unterstützt.
-?
Zeigt einen minimalen Hilfetext für diese Erweiterung im Befehlsfenster des Debuggers an.
DLL
Ext.dll
Zusätzliche Informationen
Weitere Informationen zum Anzeigen und Durchsuchen des Speichers finden Sie unter Speicher lesen und schreiben. Zusätzliche Erweiterungen, die Speichereigenschaften anzeigen, finden Sie unter !vm (Kernelmodus) und !vprot (Benutzermodus).
Hinweise
Ohne Parameter zeigt die Erweiterung !address Informationen über den gesamten Adressraum an. Der Befehl !address -summary zeigt nur die Zusammenfassung an.
Im Kernelmodus durchsucht diese Erweiterung nur den Kernelspeicher, auch wenn Sie .process (Set Process Context) verwendet haben, um den virtuellen Adressraum eines bestimmten Prozesses anzugeben. Im Benutzermodus bezieht sich die Erweiterung !address immer auf den Speicher, den der Zielprozess besitzt.
Im Benutzermodus zeigt die Adresse der !Adresse die Merkmale des Bereichs an, zu dem die angegebene Adresse gehört. Ohne Parameter zeigt !address die Eigenschaften aller Speicherregionen an. Zu diesen Merkmalen gehören die Speichernutzung, der Speichertyp, der Speicherstatus und der Speicherschutz. Weitere Informationen über die Bedeutung dieser Informationen finden Sie in den früheren Tabellen in der Beschreibung des Parameters -f.
Das folgende Beispiel verwendet !address, um Informationen über eine Speicherregion abzurufen, die auf „kernel32.dll“ abgebildet wird.
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 diesem Beispiel wird ein Address-Wert von 0x75831234 verwendet. Die Anzeige zeigt, dass diese Adresse in einer Speicherregion liegt, die mit der Adresse 0x75831000 beginnt und mit der Adresse 0x758f6000 endet. Die Region hat die Verwendung Image, den Typ MEM_IMAGE, den Status MEM_COMMIT und den Schutz PAGE_EXECUTE_READ. (Weitere Informationen über die Bedeutung dieser Werte finden Sie in den früheren Tabellen) Die Anzeige listet auch drei andere Debugger-Befehle auf, die Sie verwenden können, um weitere Informationen über diese Speicheradresse zu erhalten.
Wenn Sie mit einer Adresse beginnen und versuchen, Informationen über sie zu ermitteln, sind die Nutzungsinformationen häufig die wertvollsten. Nachdem Sie die Verwendung kennen, können Sie zusätzliche Erweiterungen verwenden, um mehr über diesen Speicher zu erfahren. Wenn die Verwendung zum Beispiel Heap lautet, können Sie die Erweiterung !heap verwenden, um mehr zu erfahren.
Im folgenden Beispiel wird der Befehl s (Search Memory) verwendet, um jede Speicherregion vom Typ Image nach der breiten Zeichenkette „Note“ zu durchsuchen.
!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"
. . .
Im Kernelmodus ähnelt die Ausgabe von !address der Ausgabe im Benutzermodus, enthält aber weniger Informationen. Das folgende Beispiel zeigt die Ausgabe im Kernelmodus.
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
Die Bedeutung von „usage“ ist dieselbe wie im Benutzermodus. „ImageName“ gibt das Modul an, das mit dieser Adresse verbunden ist. „KernelStack“ zeigt die Adresse des ETHREAD-Blocks dieses Threads (0x817B4DA0), die Prozess-ID (0x324) und die Thread-ID (0x368).