!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
Address
Zeigt nur den Bereich des Adressraums an, der Address enthält.
-summary
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 spezifizieren Speicherbereiche nach der Art und Weise, wie der Zielprozess sie verwendet.
Filterwert | Angezeigte Speicherbereiche |
---|---|
VAR |
Belebte 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 Thread-Stapel verwendeter Speicher. |
Teb |
Speicher, der für Thread-Umgebungsblöcke (TEBs) verwendet wird. |
Peb |
Speicher, der für den Prozessumgebungsblock (PEB) verwendet wird. |
Heap |
Für Heaps verwendeter Speicher. |
PageHeap |
Der für den Ganzseiten-Heap verwendete Speicherbereich. |
CSR |
Gemeinsamer CSR-Speicher. |
Actx |
Speicher, der für Aktivierungskontextdaten verwendet wird. |
NLS |
Speicher, der für die Tabellen der Nationalen Sprachunterstützung (NLS) verwendet wird. |
FileMap |
Speicher, der für memory-mapped Dateien verwendet wird. Dieser Filter ist nur während des Live-Debugging anwendbar. |
Die folgenden Filterwerte spezifizieren Speicherregionen nach dem Speichertyp.
Filterwert | Angezeigte Speicherbereiche |
---|---|
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 Speicher4. Dieser Speicher wird von keinem anderen Prozess genutzt und ist keiner Datei zugeordnet. |
Die folgenden Filterwerte spezifizieren Speicherbereiche nach dem Zustand des Speichers.
Filterwert | Angezeigte Speicherbereiche |
---|---|
MEM_COMMIT |
Festgelegter Speicher. |
MEM_FREE |
Freier Speicher. Dazu gehört der gesamte nicht reservierte Speicher. |
MEM_RESERVE |
Reservierter Speicher. |
Die folgenden Filterwerte spezifizieren Speicherregionen durch den auf den Speicher angewendeten Schutz.
Filterwert | Angezeigte Speicherbereiche |
---|---|
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 Copy-on-Write-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 ein Copy-on-Write-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 verwendet wird. foreach. |
-c:"Command"
Führt für jeden Speicherbereich 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 jeden Speicherbereich des Typs Heap an.
Den Anführungszeichen im Befehl muss ein umgekehrter Schrägstrich (\") vorangestellt werden. Zum Beispiel sucht !address -f:Heap -c: "s -a %1 %2 \"pad\"" jeden Speicherbereich 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 Debugger an.
DLL
Ext.dll
Zusätzliche Informationen
Weitere Informationen zum Anzeigen und Durchsuchen des Speichers finden Sie unter Speicher lesen und schreiben. Für zusätzliche Erweiterungen, die Speichereigenschaften anzeigen, siehe !vm (Kernelmodus) und !vprot (Benutzer-Modus).
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 !addressAddress die Merkmale der Region an, zu der die angegebene Adresse gehört. Ohne Parameter zeigt !address die Eigenschaften aller Speicherbereiche 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 einen Speicherbereich abzurufen, der auf kernel32.dll abgebildet ist.
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 einem Speicherbereich liegt, der mit der Adresse 0x75831000 beginnt und mit der Adresse 0x758f6000 endet. Die Region hat die Verwendung Image, den Typ MEM_IMAGE, den Zustand 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 jeden Speicherbereich 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 „Verwendung“ 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).
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für