Compartir a través de


!address

La extensión !address muestra información sobre la memoria que usa el proceso de destino o el equipo de destino.

Modo de usuario

!address Address
!address -summary 
!address [-f:F1,F2,...] {[-o:{csv | tsv | 1}] | [-c:"Command"]}
!address -? | -help

Modo kernel

!address Address 
!address

Parámetros

Dirección
Muestra solo la región del espacio de direcciones que contiene Address.

-resumen
Muestra solo información de resumen.

-f:F1, F2, ...
Muestra solo las regiones especificadas por los filtros F1, F2, etc.

Los siguientes valores de filtro especifican regiones de memoria por la forma en que el proceso de destino las utiliza.

Valor de filtro Regiones de memoria mostradas

VAR

Regiones ocupadas. Estas regiones incluyen todos los bloques de asignación virtual, el montón de SBH, la memoria de los asignadores personalizados y todas las demás regiones del espacio de direcciones que no se encuentran en ninguna otra clasificación.

Gratuito

Memoria libre. Esto incluye toda la memoria que no se ha reservado.

Imagen

Memoria asignada a un archivo que forma parte de una imagen ejecutable.

Pila

Memoria usada para pilas de subprocesos.

Teb

Memoria usada para bloques de entorno de subprocesos (TEB).

Peb

Memoria usada para el bloque de entorno de procesos (PEB).

Montón

Memoria usada para montones.

PageHeap

Región de memoria usada para el montón de página completa.

CSR

Memoria compartida de CSR.

Actx

Memoria usada para los datos de contexto de activación.

NLS

Memoria usada para las tablas de compatibilidad con el idioma nacional (NLS).

FileMap

Memoria usada para archivos asignados a memoria. Este filtro solo es aplicable durante la depuración en tiempo real.

Los siguientes valores de filtro especifican regiones de memoria por el tipo de memoria.

Valor de filtro Regiones de memoria mostradas

MEM_IMAGE

Memoria asignada a un archivo que forma parte de una imagen ejecutable.

MEM_MAPPED

Memoria asignada a un archivo que no forma parte de una imagen ejecutable. Esto incluye la memoria asignada al archivo de paginación.

MEM_PRIVATE

Memoria privada. Esta memoria no la comparte ningún otro proceso y no se asigna a ningún archivo.

Los siguientes valores de filtro especifican regiones de memoria por el estado de la memoria.

Valor de filtro Regiones de memoria mostradas

MEM_COMMIT

Memoria confirmada.

MEM_FREE

Memoria libre. Esto incluye toda la memoria que no se ha reservado.

MEM_RESERVE

Memoria reservada.

Los siguientes valores de filtro especifican las regiones de memoria por la protección aplicada a la memoria.

Valor de filtro Regiones de memoria mostradas

PAGE_NOACCESS

Memoria a la que no se puede acceder.

PAGE_READONLY

Memoria que se puede leer, pero no escribir ni ejecutar.

PAGE_READWRITE

Memoria que se puede leer y escribir, pero no ejecutar.

PAGE_WRITECOPY

Memoria que tiene el comportamiento de copia en escritura.

PAGE_EXECUTE

Memoria que se puede ejecutar, pero no leer ni escribir.

PAGE_EXECUTE_READ

Memoria que se puede ejecutar y leer, pero no escribir.

PAGE_EXECUTE_READWRITE

Memoria que se puede ejecutar, leer y escribir.

PAGE_EXECUTE_WRITECOPY

Memoria que se puede ejecutar y tiene un comportamiento de copia en escritura.

PAGE_GUARD

Memoria que actúa como página de protección.

PAGE_NOCACHE

Memoria que no está almacenada en caché.

PAGE_WRITECOMBINE

Memoria que tiene habilitado el acceso de combinación de escritura.

-o:{csv | tsv | 1}
Muestra la salida según una de las siguientes opciones.

Opción Formato de salida

csv

Muestra la salida como valores separados por comas.

tsv

Muestra la salida como valores separados por tabuladores.

1

Muestra la salida en formato básico. Este formato funciona bien cuando !address se usa como entrada para .foreach.

-c:"Command"
Ejecuta un comando personalizado para cada región de memoria. Puede usar los siguientes marcadores de posición en el comando para representar campos de salida de la extensión !address.

Marcador Campo de salida

%1

Dirección base

2 %

Dirección final + 1

3 %

Tamaño de la región

%4

Tipo

5 %

Estado

%6

Protección

7 %

Uso

Por ejemplo, !address -f:Heap -c:".echo %1 %3 %5" muestra la dirección base, el tamaño y el estado de cada región de memoria de tipo Montón.

Las comillas del comando deben ir precedidas de una barra diagonal inversa (\"). Por ejemplo, !address -f:Heap -c:"s -a %1 %2 \"pad\"" busca en cada región de memoria de tipo Montón la cadena "pad".

No se admiten varios comandos separados por punto y coma.

-?
Muestra un texto de ayuda mínimo para esta extensión en la ventana Comando del depurador.

Archivo DLL

Ext.dll

Información adicional

Para obtener más información sobre cómo mostrar y buscar en memoria, consulte Lectura y escritura de memoria. Para obtener extensiones adicionales que muestren propiedades de memoria, consulte !vm (modo kernel) y !vprot (modo de usuario).

Comentarios

Sin parámetros, la extensión !address muestra información sobre todo el espacio de direcciones. El comando !address -summary muestra solo el resumen.

En el modo kernel, esta extensión busca solo la memoria del kernel, incluso si usó .process (Establecer contexto de proceso) para especificar el espacio de direcciones virtuales de un proceso determinado. En el modo de usuario, la extensión !address siempre hace referencia a la memoria que posee el proceso de destino.

En el modo de usuario, !address Address muestra las características de la región a la que pertenece la dirección especificada. Sin parámetros, !address muestra las características de todas las regiones de memoria. Estas características incluyen el uso de memoria, el tipo de memoria, el estado de memoria y la protección de memoria. Para obtener más información sobre el significado de esta información, consulte las tablas anteriores en la descripción del parámetro -f.

En el ejemplo siguiente se usa !address para recuperar información sobre una región de memoria asignada 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

En este ejemplo se usa un valor de Address de 0x75831234. La pantalla muestra que esta dirección está en una región de memoria que comienza con la dirección 0x75831000 y termina con la dirección 0x758f6000. La región tiene el uso de Imagen, el tipo MEM_IMAGE, el estado MEM_COMMIT y la protección PAGE_EXECUTE_READ. (Para obtener más información sobre el significado de estos valores, consulte las tablas anteriores). La pantalla también muestra tres otros comandos del depurador que puede usar para obtener más información sobre esta dirección de memoria.

Si empieza con una dirección e intenta determinar información sobre ella, la información de uso suele ser la más valiosa. Después de conocer el uso, puede usar extensiones adicionales para obtener más información sobre esta memoria. Por ejemplo, si el uso es Montón, puede usar la extensión !heap para obtener más información.

En el ejemplo siguiente se usa el comando s (Buscar en memoria) para buscar en cada región de memoria de tipo Imagen para la cadena de caracteres anchos "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"
. . .

En el modo kernel, la salida de !address es similar a la salida del modo de usuario, pero contiene menos información. En el siguiente ejemplo se muestra la salida del modo 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

El significado de "usage" es el mismo que en modo de usuario. "ImageName" indica el módulo asociado a esta dirección. "KernelStack" muestra la dirección del bloque ETHREAD de este subproceso (0x817B4DA0), el identificador de proceso (0x324) y el identificador de subproceso (0x368).