Как напечатать -0x4 (% rbp) в GDB? - PullRequest
8 голосов
/ 28 марта 2011

В разборке есть такой код:

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 Ответ

14 голосов
/ 28 марта 2011

Похоже, вы работаете с 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
...