2016-11-28 42 views
0

我正在学习使用gdb和寄存器调试,但我被困在一个点上。作为一个指令,我应该打印

print $esp 


result: $1 = -9008 

,但我期待这样的结果:

$2 = (void *) 0x7fffffffdcd0 

在接下来的命令,我需要输入命令:

x/24 $esp 

说没有访问该注册

Cannot access memory at address 0xffffffffffffdce0 

回答

2

你似乎是从一些i386教程阅读说明书,同时使用x86_64(64位)平台。

x86_64,没有$esp寄存器,只有$rsp一个。

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

+0

感谢。我已经更改为在i386操作系统Linux上进行调试,并且工作正常 –