找不到$ esp寄存器

时间:2016-11-28 18:44:04

标签: gdb stack-overflow buffer-overflow

我正在学习使用gdb和寄存器进行调试,但我陷入了困境。作为指示,我应该打印

print $esp


result: $1 = -9008

但我期待这样的结果:

$2 = (void *) 0x7fffffffdcd0

在下一个命令中,我需要输入该命令:

x/24 $esp

说不能访问该注册表

Cannot access memory at address 0xffffffffffffdce0

1 个答案:

答案 0 :(得分:2)

在使用i386(64位)平台时,您似乎正在阅读某些x86_64教程的说明。

x86_64上,没有$esp个注册,只有$rsp注册。

另请注意,x86_64上的调用约定是不同的(参数不一定在堆栈上传递),因此您最好的做法是找到新的64位教程,或调试32位目标(通常可以通过编译和链接它们与gcc -m32 ...)在64位主机上构建和运行32位程序。