如何在 GDB 中编写一个引用指针的表达式?

How do I write an expression that deference a pointer in GDB?

假设 EAX 包含指向某个值(双字)的指针。

我想做的是检查这个值,即写一个像 x /1wx [eax].

这样的表达式

但是,GDB 在表达式中写 [eax] 时会报错,说语法错误。

我如何在 GDB 中引用指针?

之前可以使用$通过常用名来引用寄存器。例如

print $rax

打印rax值,或

print *$rax

取消引用 rax 中的值作为指针。

https://sourceware.org/gdb/onlinedocs/gdb/Registers.html

正如另一个答案所指出的,您可以 $eax 查看该特定寄存器。

(gdb) x /1wx $eax
0x400523d <main>:  0xe5894855

'info reg' 将提供包含大量有用信息的寄存器转储。

您也可以在 gdb 中强制转换以取消引用指针。

(gdb) print /x *(int*)0x400523d
 = 0xe5894855

我在调试时经常使用这种方法。当在复杂的 class/structure 中挖掘指针时,它很有用。遵循一系列指针通常会被简化,但只需获取地址并查看取消引用即可。