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