如何编写一个表达式来干扰GDB中的指针?

时间:2016-08-25 11:16:07

标签: c++ assembly x86 gdb gnu

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

我想做的是检查这个值,即写一个像x /1wx [eax]这样的表达式。

然而,GDB在表达式中写[eax]时抱怨说语法错误。

如何在GDB中使用指针?

2 个答案:

答案 0 :(得分:5)

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

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

'info reg'将提供包含大量有用信息的注册转储。

你也可以使用gdb来取消引用指针。

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

我在调试时经常使用这种方法。在挖掘复杂的类/结构内部时,它非常有用。一系列指针经常被简化,但只是抓住地址并查看取消引用。

答案 1 :(得分:4)

您可以使用$之前的常用名称来引用寄存器。例如

print $rax

打印rax值或

print *$rax

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

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