好的,所以基本上我想知道如何打印与存储在 GDB 中的寄存器中的地址偏移的内存地址的值。例如,以这条装配线为例:
mov 0x34(%esp),%edx
在我的理解中,这会在堆栈指针指向的地址之后获取 52 个字节的值,并将该值存储在 edx 寄存器中。在这种情况下,该值是一个字符串,因此它将存储一个 char *。在 edx 寄存器上使用 GDB 内部的检查命令时:
x/s $edx
它按预期打印出字符串。但是,当我尝试通过直接检查使用此命令复制的位置来打印字符串时:
x/s $esp + 0x34
它打印出垃圾。为什么是这样?我是否误解了 GDB 命令的语法,还是其他原因?