2016-11-28 45 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上進行調試,並且工作正常 –