在 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
包含一个指针,而您想取消引用该指针。
我有一个 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
包含一个指针,而您想取消引用该指针。