如何在gdb中打印-0x4(%rbp)?

12

在反汇编中有这样的代码:

movl   $0x6,-0x4(%rbp)

我尝试以这种方式打印值,但失败了:

(gdb) p  0x4(%esp)
A syntax error in expression, near `%esp)'.
(gdb) p 0x4+$esp
Argument to arithmetic operation not a number or boolean.
如何正确打印它?
1个回答

21

看起来你正在使用64位代码,因此你只需要:

(gdb) p $rbp-0x4
$1 = (void *) 0x7fff5fbff71c
如果您想查看实际位于该地址的内容,则需要转换void *地址,例如:
(gdb) p /x *(int *)($rbp-0x4)
$2 = 0x7fff
或者更简洁地说,使用x而不是p,例如。
(gdb) x /w $rbp-0x4
0x7fff5fbff71c: 0x00007fff

您也可以使用:(gdb) x/w $rbp-0x4 - Karmastan
@Karmastan:很酷-谢谢-我会将其作为答案的另一种选择添加进去。 - Paul R
x /w * $rbp-0x4,应该改为 x /w $rbp-0x4。 - Man of One Way
1
查看以十六进制表示的64位数量: x / xg $rbp-0x4 - kaiwan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接