如何在 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
中的值作为指针。
正如另一个答案所指出的,您可以 $eax 查看该特定寄存器。
(gdb) x /1wx $eax
0x400523d <main>: 0xe5894855
'info reg' 将提供包含大量有用信息的寄存器转储。
您也可以在 gdb 中强制转换以取消引用指针。
(gdb) print /x *(int*)0x400523d
= 0xe5894855
我在调试时经常使用这种方法。当在复杂的 class/structure 中挖掘指针时,它很有用。遵循一系列指针通常会被简化,但只需获取地址并查看取消引用即可。
假设 EAX 包含指向某个值(双字)的指针。
我想做的是检查这个值,即写一个像 x /1wx [eax]
.
但是,GDB 在表达式中写 [eax]
时会报错,说语法错误。
我如何在 GDB 中引用指针?
之前可以使用$
通过常用名来引用寄存器。例如
print $rax
打印rax
值,或
print *$rax
取消引用 rax
中的值作为指针。
正如另一个答案所指出的,您可以 $eax 查看该特定寄存器。
(gdb) x /1wx $eax
0x400523d <main>: 0xe5894855
'info reg' 将提供包含大量有用信息的寄存器转储。
您也可以在 gdb 中强制转换以取消引用指针。
(gdb) print /x *(int*)0x400523d
= 0xe5894855
我在调试时经常使用这种方法。当在复杂的 class/structure 中挖掘指针时,它很有用。遵循一系列指针通常会被简化,但只需获取地址并查看取消引用即可。