我正在学习使用gdb和寄存器进行调试,但我陷入了困境。作为指示,我应该打印
print $esp
result: $1 = -9008
但我期待这样的结果:
$2 = (void *) 0x7fffffffdcd0
在下一个命令中,我需要输入该命令:
x/24 $esp
说不能访问该注册表
Cannot access memory at address 0xffffffffffffdce0
答案 0 :(得分:2)
在使用i386
(64位)平台时,您似乎正在阅读某些x86_64
教程的说明。
在x86_64
上,没有$esp
个注册,只有$rsp
注册。
另请注意,x86_64
上的调用约定是不同的(参数不一定在堆栈上传递),因此您最好的做法是找到新的64位教程,或调试32位目标(通常可以通过编译和链接它们与gcc -m32 ...
)在64位主机上构建和运行32位程序。