Как напечатать -0x4(%rbp) в gdb?

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

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.

Как правильно распечатать?


person compiler    schedule 28.03.2011    source источник


Ответы (1)


Похоже, вы работаете с 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
person Paul R    schedule 28.03.2011
comment
Вы также можете использовать: (gdb) x/w $rbp-0x4 - person Karmastan; 28.03.2011
comment
@Karmastan: круто - спасибо - добавлю это как альтернативу в ответ - person Paul R; 28.03.2011
comment
x /w * $rbp-0x4, должно быть x /w $rbp-0x4 - person Man of One Way; 18.05.2012
comment
Чтобы увидеть, что там в качестве 64-битного числа в шестнадцатеричном виде: x/xg $rbp-0x4 - person kaiwan; 18.03.2013