!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 扩展显示 UNICODE 字符。 默认长度为 16 个字符(共 32 个字节),或直到遇到 NULL 字符为止。

  • !dw 扩展显示 WORD 值。 默认长度为 64 个 DWORD(共 128 个字节)。

因此,使用两个具有相同大小值的不同扩展很可能会导致显示的总内存量不同。 例如,使用命令 !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 ................