gdb使用一个命令的计算作为另一个命令的参数

时间:2013-11-03 17:10:27

标签: memory gdb stack

我正在尝试显示当前堆栈帧的内存打印,但是现在我要做的就是费力:

# Find out how big the current frame is:
(gdb) print/x $ebp - $esp
$1 = 0x4
# Use that in a display:
(gdb) x/4x $ebp

我很乐意使用define命令来实现它,所以这只是在每一步之后发生,所以我对堆栈框架有了持续的认识。

做这些事情:

(gdb) x/$1x $ebp
(gdb) x/($1)x $ebp

没用。

1 个答案:

答案 0 :(得分:2)

GDB中,命令x用于检查带有如下参数的内存,

x
x address
x/nfu address  

n重复计数,f是显示格式& u是单位大小;

(gdb) p/x $rsp
$4 = 0x7fffffffe248
(gdb) x/4x 0x7fffffffe248
0x7fffffffe248: 0xffffe4e5  0x00007fff  0x00000000  0x00000000
(gdb) x/$4
0x7fffffffe248: 0xffffe4e5
(gdb) x/$4x 
Value can't be converted to integer.
(gdb) x/$4 $rsp
A syntax error in expression, near `$rsp'.
(gdb) x/$_
0x7fffffffe248: 0xffffe4e5 

观察x/$_之后的最后一个命令x,检查的最后一个地址可用于使用$_变量的表达式。

编辑:变量$_生成的地址的内存内容由变量$__给出。