GDB-从堆栈中读取1个字

GDB-从堆栈中读取1个字,gdb,x86-64,Gdb,X86 64,我想以十六进制的形式从堆栈顶部打印1个字。为此,我键入以下内容: (gdb)x/1xw$esp 但GDB不断出现: 0xFFFFFFFFFFFF030:无法访问地址0xFFFFFFFFFFFF030处的内存 我试图调试的程序已经将一个值推送到堆栈上,所以如果您想知道我可能在程序的一开始就尝试访问内核变量,那么情况并非如此。 有什么想法吗 0xFFFFFFFFFF030是一个64位常量,因此您在x64位模式下运行。但是$esp是一个32位寄存器(在此上下文中,GDB符号扩展到64位)。64位堆栈指

我想以十六进制的形式从堆栈顶部打印1个字。为此,我键入以下内容:

(gdb)x/1xw$esp

但GDB不断出现:

0xFFFFFFFFFFFF030:无法访问地址0xFFFFFFFFFFFF030处的内存

我试图调试的程序已经将一个值推送到堆栈上,所以如果您想知道我可能在程序的一开始就尝试访问内核变量,那么情况并非如此。
有什么想法吗

0xFFFFFFFFFF030
是一个64位常量,因此您在x64位模式下运行。但是
$esp
是一个32位寄存器(在此上下文中,GDB符号扩展到64位)。64位堆栈指针称为
$rsp
。请尝试以下方法:

(gdb) x/1xw $rsp

0xFFFFFFFFFF030
是一个64位常量,因此您在x64位模式下运行。但是
$esp
是一个32位寄存器(在此上下文中,GDB符号扩展到64位)。64位堆栈指针称为
$rsp
。请尝试以下方法:

(gdb) x/1xw $rsp

谢谢。成功了。我只想知道一件小事。rax、rsp或任何其他64位寄存器中的“r”代表什么?32位寄存器前面有一个代表“扩展”的“e”。@7_R3X:@ecm:非常感谢!谢谢。成功了。我只想知道一件小事。rax、rsp或任何其他64位寄存器中的“r”代表什么?32位寄存器前面有一个代表“扩展”的“e”。@7_R3X:@ecm:非常感谢!