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