C++ 如何在GDB中编写一个遵循指针的表达式?

C++ 如何在GDB中编写一个遵循指针的表达式?,c++,assembly,x86,gdb,gnu,C++,Assembly,X86,Gdb,Gnu,假设EAX包含指向某个值(双字)的指针 我想做的是检查这个值,即编写一个类似x/1wx[eax]的表达式 然而,GDB在表达式中编写[eax]时抱怨语法错误 我如何尊重GDB中的指针 您可以在前面使用$按常用名称引用寄存器。比如说 print $rax 打印rax值,或 print *$rax 将rax中的值作为指针取消引用 正如另一个答案所指出的,您可以使用$eax查看特定寄存器 (gdb) x /1wx $eax 0x400523d <main>: 0xe5894855

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

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

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


我如何尊重GDB中的指针

您可以在前面使用
$
按常用名称引用寄存器。比如说

print $rax
打印
rax
值,或

print *$rax
rax
中的值作为指针取消引用


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

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

我在调试时经常使用这种方法。在复杂的类/结构中挖掘指针时,它非常有用。遵循一系列指针通常会被简化,但只是获取地址并查看解引用。

谢谢,所以本质上要尊重指针,我应该使用C语法,如您的“(int)0x40052d”,其中0x40052d是指针值?是的,这是正确的。gdb处理所有基类型、int、float、double等。还支持简单的用户类型。C++模板类型可能很难打字,但是你支持你在“Cx/x(int)0x400 52D”中漏掉“3”吗?谢谢你的帮助和知识。谢谢你的帮助答案。记住GDB语法是C类的,即使你在调试ASM。
(gdb) print /x *(int*)0x400523d
$3 = 0xe5894855