Поделиться через


!Адрес

Расширение !address отображает сведения о памяти, используемой целевым процессом или целевым компьютером.

Режим пользователя

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

Режим ядра

!address Address 
!address

Параметры

Адрес
Отображает только регион адресного пространства, содержащего адрес.

-Сводка
Отображает только сводную информацию.

-f:F1, F2, ...
Отображает только регионы, указанные фильтрами F1, F2 и т. д.

Следующие значения фильтров указывают области памяти таким образом, как целевой процесс использует их.

Значение фильтра Отображаемые области памяти

VAR

Занятые регионы. Эти регионы включают все блоки виртуального выделения, кучу SBH, память от пользовательских распределителей и все остальные регионы адресного пространства, которые не попадают в другую классификацию.

Бесплатно

Свободная память. Сюда входят все памяти, которые не были зарезервированы.

Изображения

Память, сопоставленная с файлом, который является частью исполняемого образа.

Стек

Память, используемая для стеков потоков.

Teb

Память, используемая для блоков среды потоков (TEOB).

Peb

Память, используемая для блока среды обработки (PEB).

Куча

Память, используемая для куч.

Pageheap

Область памяти, используемая для полностраничной кучи.

CSR

Общая память CSR.

Actx

Память, используемая для данных контекста активации.

NLS

Память, используемая для таблиц поддержки национальных языков (NLS).

FileMap

Память, используемая для сопоставленных с памятью файлов. Этот фильтр применяется только во время динамической отладки.

Следующие значения фильтра указывают области памяти по типу памяти.

Значение фильтра Отображаемые области памяти

MEM_IMAGE

Память, сопоставленная с файлом, который является частью исполняемого образа.

MEM_MAPPED

Память, сопоставленная с файлом, который не является частью исполняемого образа. Это включает память, сопоставленную с файлом разбиения на страницы.

MEM_PRIVATE

Частная память. Эта память не предоставляется другим процессом и не сопоставляется с любым файлом.

Следующие значения фильтра указывают области памяти по состоянию памяти.

Значение фильтра Отображаемые области памяти

MEM_COMMIT

Зафиксированная память.

MEM_FREE

Свободная память. Сюда входят все памяти, которые не были зарезервированы.

MEM_RESERVE

Зарезервированная память.

Следующие значения фильтров указывают области памяти защитой, примененной к памяти.

Значение фильтра Отображаемые области памяти

PAGE_NOACCESS

Доступ к памяти, к которому не удается получить доступ.

PAGE_READONLY

Память, доступная для чтения, но не записываемая и не исполняемая.

PAGE_READWRITE

Память, доступная для чтения и записи, но не исполняемая.

PAGE_WRITECOPY

Память, которая имеет поведение копирования по записи.

PAGE_EXECUTE

Память, которая является исполняемой, но нечитаемой и не записываемой.

PAGE_EXECUTE_READ

Память, которая является исполняемой и доступной для чтения, но не доступной для записи.

PAGE_EXECUTE_READWRITE

Память, которая является исполняемой, читаемой и записываемой.

PAGE_EXECUTE_WRITECOPY

Память, которая является исполняемым и имеет поведение копирования во время записи.

PAGE_GUARD

Память, которая выступает в качестве охранной страницы.

PAGE_NOCACHE

Память, которая не кэшируется.

PAGE_WRITECO МБ INE

Память с включенным доступом для записи.

-o:{csv | tsv | 1}
Отображает выходные данные в соответствии с одним из следующих параметров.

Вариант Формат вывода

csv

Отображает выходные данные в виде значений, разделенных запятыми.

tsv

Отображает выходные данные в виде значений, разделенных вкладками.

1

Отображает выходные данные в формате без системы. Этот формат хорошо подходит, если !address используется в качестве входных данных для foreach.

-c:"Command"
Выполняет пользовательскую команду для каждого региона памяти. Для представления выходных полей расширения !address можно использовать следующие заполнители в команде.

Заполнитель Поле "Output" (Выходные данные)

1%

Базовый адрес

2%

Конечный адрес + 1

%3

Размер региона

%4

Тип

5%

State

%6

Защита

7%

Использование

Например, !address -f:Heap -c:".echo %1 %3 %5" отображает базовый адрес, размер и состояние для каждого региона памяти типа Кучи.

Кавычки в команде должны предшествовать косой черте (\). Например, !address -f:Heap -c:"s -a %1 %2 \"pad\" выполняет поиск в каждой области памяти типа Кучи для строки "pad".

Несколько команд, разделенных точкой с запятой, не поддерживаются.

-?
Отображает минимальный текст справки для этого расширения в окне команды отладчика.

DLL-библиотеки

Ext.dll

Дополнительная информация

Дополнительные сведения о том, как отображать и искать память, см. в разделе "Чтение и запись памяти". Дополнительные расширения, отображающие свойства памяти, см. в разделе !vm (режим ядра) и !vprot (режим пользователя).

Замечания

Без каких-либо параметров расширение !address отображает сведения обо всем адресном пространстве. Команда !address -summary отображает только сводку.

В режиме ядра этот расширение выполняет поиск только памяти ядра, даже если вы использовали .process (Set Process Context) для указания виртуального адресного пространства данного процесса. В пользовательском режиме расширение !address всегда ссылается на память, принадлежащую целевому процессу.

В пользовательском режиме адрес !address показывает характеристики региона, к которому принадлежит указанный адрес. Без параметров !address отображает характеристики всех регионов памяти. К этим характеристикам относятся использование памяти, тип памяти, состояние памяти и защита памяти. Дополнительные сведения о значении этой информации см. в более ранних таблицах в описании параметра -f .

В следующем примере используется !address для получения сведений о области памяти, сопоставленной с 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

В этом примере используется значение адреса 0x75831234. На экране показано, что этот адрес находится в области памяти, которая начинается с адреса 0x75831000 и заканчивается адресом 0x758f6000. Регион имеет образ использования, тип MEM_IMAGE, состояние MEM_COMMIT и защиту PAGE_EXECUTE_READ. (Дополнительные сведения о значении этих значений см. в предыдущих таблицах.) На экране также перечислены три другие команды отладчика, которые можно использовать для получения дополнительных сведений об этом адресе памяти.

Если вы начинаете с адреса и пытаетесь определить сведения об этом, сведения об использовании часто являются наиболее ценными. После получения сведений об использовании можно использовать дополнительные расширения для получения дополнительных сведений об этой памяти. Например, если используется куча, можно использовать расширение !heap для получения дополнительных сведений.

В следующем примере команда s (Search Memory) используется для поиска каждого региона памяти типа Image для строки "Примечание".

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

В режиме ядра выходные данные !address похожи на выходные данные пользовательского режима, но содержат меньше информации. В следующем примере показаны выходные данные режима ядра.

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

Значение "использование" совпадает с пользовательским режимом. ImageName указывает модуль, связанный с этим адресом. "KernelStack" отображает адрес блока ETHREAD этого потока (0x817B4DA0), идентификатор процесса (0x324) и идентификатор потока (0x368).