Debugging Tools for Windows

!db, !dc, !dd, !dp, !dq, !du, !dw

!db!dc!dd!dp!dq!du!dw扩展命令显示目标机上的指定物理地址的数据。

这些扩展命令不能和d* (Display Memory)命令或者!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

参数

Caching
可以是下面这些值中任意一个。Caching值必须包含在中括号中:
[c]
使得该扩展从已缓存内存(cached memory)中读取。
[uc]
使得该扩展从未缓存内存(uncached memory)中读取。
[wc]
使得该扩展从写聚合内存(write-combined memory)中读取。
-m
每次读取一个内存单元。例如,!db -m以8位为单位读取内存块,!dw –m以16位为单位读取。如果硬件不支持对32位物理内存的读取,则可能需要使用-m选项。该选项不会影响输出的长度或者形式 — 只会影响对内存的访问方式。
PhysicalAddress
以16进制格式指定要显示的物理地址。如果在第一次使用该命令时省略,则默认地址为0。如果在后续的命令中省略,则从上一次显示的末尾开始。
L Size
指定要显示的内存块个数。每个块的大小由使用的具体命令决定。

DLL

Windows 2000 Kext.dll
Kdextx86.dll
Windows XP和之后 Kext.dll

注释

这些命令都用于显示物理内存,但是它们的显示格式和默认的长度不同:

因此,对这些扩展命令中的两个使用一样的Size常常显示出来的结果的长度是不同的。例如,使用!db L 32会显示32字节(显示16进制字节值),而!dd L 32 会显示128个字节(显示DWORD值)。

下面是使用了缓存属性标志(caching attribute flag)的示例:

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

附加信息

使用!e*扩展命令来写入物理内存。关于内存操作的概述和内存相关命令的描述,查看读写内存

Build machine: CAPEBUILD