按虚拟地址访问内存
若要访问内存地址或地址范围,可以使用多个命令。 Visual Studio 和 WinDbg 提供可用于查看和编辑内存的用户界面元素(以及命令)。 有关详细信息,请参阅在WinDbg (Classic) 中查看和编辑内存。
以下命令可以读取或写入各种格式的内存。 这些格式包括十六进制字节、字词(字词、双字和四进制字词)、整数(短、长、四进制整数和无符号整数)、浮点数(10 字节、16 字节、32 字节和 64 字节实数)和 ASCII 字符。
可以使用以下命令来处理更加专用的数据类型:
dt(显示类型)命令会查找各种数据类型,并显示由正在调试的应用程序创建的数据结构。 此命令具有很多用途,具有许多变体和选项。
ds、dS(显示字符串)命令显示 STRING、ANSI_STRING 或 UNICODE_STRING 数据结构。
dl(显示链接列表)命令跟踪并显示链接列表。
d*s(显示字词和符号)命令会查找可能包含符号信息的双字或四进制字词,然后显示数据和符号信息。
!address 扩展命令显示有关位于特定地址的内存属性的信息。
可以使用以下命令操作内存范围:
m(移动内存)命令将一个内存范围的内容移到另一个内存范围。
f(填充内存)命令将模式写入内存范围,重复该模式,直到范围已满。
c(比较内存)命令比较两个内存范围的内容。
s(搜索内存)命令在内存范围内搜索指定的模式,或搜索内存范围内存在的任何 ASCII 或 Unicode 字符。
.holdmem(保留和比较内存)命令将一个内存范围与另一个内存范围进行比较。
在大多数情况下,这些命令在当前基数中解释其参数。 因此,如果当前基数不是 16,则应在十六进制地址之前添加 0x。 但是,这些命令的显示输出通常采用十六进制格式,而不考虑当前基数。 (有关输出的详细信息,请参阅单个命令主题。)“内存”窗口以十进制格式显示整数和实数,并以十六进制格式显示其他格式。
若要更改默认基数,请使用 n(设置基数)命令。 若要快速将数字从一个基数转换为另一个基数,请使用 ?(计算表达式) 命令或 .formats(显示数字格式)命令。
执行用户模式调试时,虚拟地址的含义由当前进程确定。 执行内核模式调试时,虚拟地址的含义可由调试器控制。 有关详细信息,请参阅进程上下文。