可使用 examine 命令或其别名 x 显示内存内容或地址。
下列语法用于以 format 格式显示始于 address 的 count 项内存内容。缺省的 address 为先前显示的最后一个地址后的下一个地址。缺省 count 为 1。缺省 format 与在先前的 examine 命令中使用的相同;如果这是给出的第一个命令,则为 X。
examine 命令的语法如下:
examine [address] [/ [count] [format]] |
要以 format 格式显示 address1 到 address2(首末地址包含在内)的内存内容,请键入:
examine address1, address2 [/ [format]] |
要以给定格式显示地址而不是地址内容,请键入:
examine address = [format] |
要打印 examine 最后显示的地址后的下一个地址处存储的值,请键入:
examine +/ i |
要打印表达式的值,请以地址形式输入表达式:
examine address=format examine address= |
address 是求值结果为地址或可用作地址的任何表达式。可用 +(加号)替换 address,它以缺省格式显示下一个地址的内容。
例如,下面所示都是有效地址:
0xff99 |
绝对地址 |
main |
函数地址 |
main+20 |
与函数地址的偏移 |
&errno |
变量地址 |
str |
指向字符串的指针值变量 |
用于显示内存的符号地址的名称前有和号 (&)。函数名称前可以不带和号,例如,&main 等同于 main。寄存器名称前有美元符号 ($)。
format 是 dbx 用来显示查询结果的地址显示格式。产生的输出取决于当前显示 format。要更改显示格式,应提供不同的 format 代码。
每个 dbx 会话开始时的缺省格式设置为 X,即以十六进制 32 位字显示地址或值。以下内存显示格式为合法格式。
i |
显示为汇编指令。 |
d |
显示为十进制 16 位(2 字节)。 |
D |
显示为十进制 32 位(4 字节)。 |
o |
显示为八进制 16 位(2 字节)。 |
O |
显示为八进制 32 位(4 字节)。 |
x |
显示为十六进制 16 位(2 字节)。 |
X |
显示为十六进制 32 位(4 字节)。(缺省格式) |
b |
显示为八进制字节。 |
c |
显示为字符。 |
w |
显示为宽字符。 |
s |
显示为以空字节终止的字符串。 |
W |
显示为宽字符串。 |
f |
显示为单精度浮点数。 |
F, g |
显示为双精度浮点数。 |
E |
显示为扩展精度浮点数。 |
ld, lD |
显示为十进制 32 位(4 字节)(与 D 相同)。 |
lo, lO |
显示为八进制 32 位(4 字节)(与 O 相同)。 |
lx, LX |
显示为十六进制 32 位(4 字节)(与 X 相同)。 |
Ld, LD |
显示为十进制 64 位(8 字节)。 |
Lo, LO |
显示为八进制 64 位(8 字节)。 |
Lx, LX |
显示为十六进制 64 位(8 字节)。 |
count 为十进制重复计数。增量大小取决于内存显示格式。
下面的示例说明如何使用地址以及 count 和 format 选项来显示始于当前停止点的五个连续的反汇编指令。
对于基于 SPARC 的系统:
(dbx) stepi stopped in main at 0x108bc 0x000108bc: main+0x000c: st %l0, [%fp - 0x14] (dbx) x 0x108bc/5i 0x000108bc: main+0x000c: st %l0, [%fp - 0x14] 0x000108c0: main+0x0010: mov 0x1,%l0 0x000108c4: main+0x0014: or %l0,%g0, %o0 0x000108c8: main+0x0018: call 0x00020b90 [unresolved PLT 8: malloc] 0x000108cc: main+0x001c: nop |
对于基于 x86 的系统:
(dbx) x &main/5i 0x08048988: main : pushl %ebp 0x08048989: main+0x0001: movl %esp,%ebp 0x0804898b: main+0x0003: subl $0x28,%esp 0x0804898e: main+0x0006: movl 0x8048ac0,%eax 0x08048993: main+0x000b: movl %eax,-8(%ebp) |