Debugging 如何在GDB中从寄存器中取消引用并打印内存?

Debugging 如何在GDB中从寄存器中取消引用并打印内存?,debugging,assembly,x86,gdb,reverse-engineering,Debugging,Assembly,X86,Gdb,Reverse Engineering,我正在使用GDB反向工程一个二进制文件,并在函数调用之前分析寄存器内容。寄存器eax包含“一个字符串”的地址,相同的地址存储在ebp-12 (gdb) x/s $eax 0x56557100: "A string" (gdb) x/wx $ebp-12 0xffffd02c: 0x56557100 当我尝试取消对地址的引用时,会收到一条警告 (gdb) x/8c *($ebp -12) Attempt to dereference a generic poi

我正在使用GDB反向工程一个二进制文件,并在函数调用之前分析寄存器内容。寄存器
eax
包含
“一个字符串”
的地址,相同的地址存储在
ebp-12

(gdb) x/s $eax
0x56557100:     "A string"
(gdb) x/wx $ebp-12
0xffffd02c:     0x56557100
当我尝试取消对地址的引用时,会收到一条警告

(gdb) x/8c *($ebp -12)
Attempt to dereference a generic pointer.
但是这个指针可以安全地解除引用

(gdb) x/s 0x56557100
0x56557100:     "A string"

如何在一行中打印指针的内容?

您能给我们展示一下
ptype$ebp
p/s*(char**)($ebp-12)
@MarkPlotnick
ptype$ebp
输出
type=void*
@Jester
p/s*(char**)($ebp-12)
技巧:
$1=0x56557100“字符串”
更简单的
p(char*)($ebp-12)
有效吗?我忘了,GDB可能会自动取消字符*。