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


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