!адрес
Расширение !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). |
Куча |
Память, используемая для куч. |
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_WRITECOMBINE |
Память с включенным доступом для записи. |
-o:{csv | tsv | 1}
Отображает выходные данные в соответствии с одним из следующих параметров.
Вариант | Формат вывода |
---|---|
csv |
Отображает выходные данные в виде значений, разделенных запятыми. |
tsv |
Отображает выходные данные в виде значений, разделенных вкладками. |
1 |
Отображает выходные данные в формате без системы. Этот формат хорошо подходит, если !address используется в качестве входных данных для foreach. |
-c:"Command"
Выполняет пользовательскую команду для каждого региона памяти. Для представления выходных полей расширения !address можно использовать следующие заполнители в команде.
Заполнитель | Поле "Output" (Выходные данные) |
---|---|
1% |
Базовый адрес |
2% |
Конечный адрес + 1 |
%3 |
Размер региона |
%4 |
Тип |
5% |
Штат |
%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).