在 GDB 中读取带偏移量的 IA32 寄存器的语法?

Syntax to read IA32 register with offset in GDB?

我有一个 GDB 语法问题...我正在为一门课程努力学习 IA32,而 GDB 可以方便地查看寄存器。但是,我经常看到寄存器引用的值加上偏移量。例如:

cmpl    -8(%rbp), %eax

很容易看出 %eax 中的值:

(gdb) p $eax
 = 5

我知道 -8(%rbp) 是“存储在 %rbp, 中的地址之前的八个字节”,但是我到底是怎么在 GDB 中看到这个值的? None 以下工作对我来说:

(gdb) p $rbp-8
 = (void *) 0x7fffffffe238
(gdb) p $(rbp-8)
No symbol "rbp" in current context.
(gdb) p ($rbp-8)
 = (void *) 0x7fffffffe238
(gdb) p 0x7fffffffe238
 = 140737488347704

我希望 -8(%rbp) 保持整数值 7,但我无法确认。

顺便说一句,我应该说:我在学校的 Linux 服务器上使用 GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-80.el7。

有什么建议吗?提前致谢!

-饶

尝试*(int*)($rbp - 8)。 GDB 接受类似 C 的语法,必须进行强制转换才能告诉它有多少字节构成了您感兴趣的值。取消引用是必要的,因为 $rbp 包含一个指针,而您想取消引用该指针。