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