在反汇编中有这样的代码:
movl $0x6,-0x4(%rbp)
Run Code Online (Sandbox Code Playgroud)
我尝试以这种方式打印值但失败了:
(gdb) p 0x4(%esp)
A syntax error in expression, near `%esp)'.
(gdb) p 0x4+$esp
Argument to arithmetic operation not a number or boolean.
Run Code Online (Sandbox Code Playgroud)
如何正确打印?
Pau*_*l R 14
看起来你正在使用64位代码,在这种情况下你只需要,例如:
(gdb) p $rbp-0x4
$1 = (void *) 0x7fff5fbff71c
Run Code Online (Sandbox Code Playgroud)
如果你想看到什么是真正的在这个地址,那么你就需要转换void *地址,例如
(gdb) p /x *(int *)($rbp-0x4)
$2 = 0x7fff
Run Code Online (Sandbox Code Playgroud)
或者,更简洁地说,使用x而不是p,例如
(gdb) x /w $rbp-0x4
0x7fff5fbff71c: 0x00007fff
Run Code Online (Sandbox Code Playgroud)