!db, !dc, !dd, !dp, !dq, !du, !dw
Расширения !db, !dc, !dd, !dp, !dq, !du и !dw отображают данные по указанному физическому адресу на целевом компьютере.
Эти команды расширения не следует путать с командой d* (отображаемая память) или с командой расширения !ntsdexts.dp.
!db [Caching] [-m] [PhysicalAddress] [L Size]
!dc [Caching] [-m] [PhysicalAddress] [L Size]
!dd [Caching] [-m] [PhysicalAddress] [L Size]
!dp [Caching] [-m] [PhysicalAddress] [L Size]
!dq [Caching] [-m] [PhysicalAddress] [L Size]
!du [Caching] [-m] [PhysicalAddress] [L Size]
!dw [Caching] [-m] [PhysicalAddress] [L Size]
Параметры
Кэширование
Может быть любым из следующих значений. Значение кэширования должно быть окружено квадратными скобками:
[c]
Это расширение может считываться из кэшированного памяти.
[uc]
Это расширение приводит к чтению из некичированного памяти.
[wc]
Это расширение приводит к чтению из объединенной памяти записи.
-m
Приводит к тому, что память будет считываться по одной единице за раз. Например, !db -m считывает память в 8-разрядных блоках и !dw -m считывает память в 16-разрядных блоках. Если оборудование не поддерживает 32-разрядное чтение физической памяти, возможно, потребуется использовать параметр -m . Этот параметр не влияет на длину или внешний вид дисплея. Это влияет только на доступ к памяти.
PhysicalAddress
Указывает первый физический адрес, отображаемый в шестнадцатеричном формате. Если это опущено при первом использовании этой команды, адрес по умолчанию равен нулю. Если это опущено при последующем использовании, экран начнется, где заканчивается последнее отображение.
L **** Размер
Указывает количество блоков памяти для отображения. Размер блока определяется точным расширением.
Среда
Режим |
Режим ядра |
DLL-библиотеки
Kext.dll
Дополнительная информация
Чтобы записать в физическую память, используйте расширения !e\* . Обзор операций с памятью и описание других команд, связанных с памятью, см. в статье "Чтение и запись памяти".
Замечания
Эти расширения отображают физическую память, но их форматы отображения и длина по умолчанию отличаются:
Расширение !db отображает шестнадцатеричные байты и эквиваленты символов ASCII. Длина по умолчанию составляет 128 байт.
Расширение !dc отображает значения DWORD и эквиваленты символов ASCII. Длина по умолчанию составляет 32 DWORD (128 байт).
Расширение !dd отображает значения DWORD. Длина по умолчанию составляет 32 DWORD (128 байт).
Расширение !dp отображает значения ULONG_PTR. Это 32-разрядные или 64-разрядные слова в зависимости от размера инструкции. Длина по умолчанию составляет 128 байт.
Расширение !dq отображает значения ULONG64_PTR. Это 32-разрядные слова. Длина по умолчанию составляет 128 байт.
Расширение !du отображает символы ЮНИКОДа. Длина по умолчанию составляет 16 символов (32 байта) или до тех пор, пока не будет обнаружен символ NULL.
Расширение !dw отображает значения WORD. Длина по умолчанию составляет 64 DWORD (128 байт).
Следовательно, использование двух этих расширений, которые отличаются с одинаковым значением size , скорее всего, приведет к разнице в общем объеме памяти, отображаемой. Например, при использовании команды !db L 32 отображается 32 байта (как шестнадцатеричные байты), в то время как команда !dd L 32 приводит к отображению 128 байтов (как значения DWORD).
Ниже приведен пример, в котором требуется флаг атрибута кэширования:
kd> !dc e9000
physical memory read at e9000 failed
If you know the caching attributes used for the memory,
try specifying [c], [uc] or [wc], as in !dd [c] <params>.
WARNING: Incorrect use of these flags will cause unpredictable
processor corruption. This may immediately (or at any time in
the future until reboot) result in a system hang, incorrect data
being displayed or other strange crashes and corruption.
kd> !dc [c] e9000
# e9000 000ea002 000ea002 000ea002 000ea002 ................
# e9010 000ea002 000ea002 000ea002 000ea002 ................