在調查崩潰時,我遇到以下代碼片斷,並立即認識到mov
指令實際上應該是movq
以獲得正確的64位寄存器操作。x86-64 GNU彙編
#elif defined(__x86_64__)
unsigned long rbp;
__asm__ volatile ("mov %%rbp, %0" : "=r" (rbp));
sp = (void **) rbp;
#else
此外此,我也發現,聲稱,rbp
寄存器x86-64的是通用和不包含當前幀的地址文檔。我還發現文檔聲稱rbp
確實包含當前幀的地址。有人可以澄清嗎?
'rbp'包含基地址,如果你不'使用['-fomit-frame-pointer'(或類似的選項)](http://stackoverflow.com/questions/14666665/trying-to-understand-gcc-option-fomit-frame-pointer)http:/ /stackoverflow.com/questions/579262/what-is-the-purpose-of-the-frame-pointer – 2015-04-16 17:05:00