gdb(Linux)中x /输出的含义是什么?

时间:2014-02-22 18:32:00

标签: assembly gdb

我正在使用gdb调试C程序。

(gdb) r prog_name
(gdb) break main
(gdb) x/wx $esp
(gdb) 0xbffff3d0:     0xbffff60d

我知道前3个命令的含义。

我不明白的是最后一个(第三个命令后gdb的输出)的含义。 具体来说,我不明白: $ esp是一个寄存器,因此我希望在寄存器中找到一个单值,据我所知,寄存器没有地址即可。 因此,假设 0xbffff60d 是寄存器 esp 包含的值,那么** 0xbffff3d0 **

提前致谢

1 个答案:

答案 0 :(得分:3)

直接来自gdb

(gdb) help x
Examine memory: x/FMT ADDRESS.
ADDRESS is an expression for the memory address to examine.
FMT is a repeat count followed by a format letter and a size letter.
Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),
  t(binary), f(float), a(address), i(instruction), c(char) and s(string),
  T(OSType), A(floating point values in hex).
Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes).
The specified number of objects of the specified size are printed
according to the format.

因此,在您的情况下,$esp包含0xbffff3d0,如果您将该值解释为指针并取消引用它,您将*(uint32_t *)0xbffff3d00xbffff60d