c++ - gcc编译后每个函数开始的 “push %ebp; movl %esp, %ebp” 是什么意思
天蓬老师
天蓬老师 2017-04-17 13:07:07
0
3
1220
push %ebp
movl %esp, %ebp

是什么意思?有什么作用?为什么要这样做???

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆(3)
迷茫

ebp是幀指針,esp是棧指針。這兩行程式碼是保存舊的幀,創建新的堆疊幀。彙編裡的過程呼叫需要這個動作

Peter_Zhu

創建stack frame,可以優化掉。保留這個主要方便調試,可以追溯函數呼叫鏈。
unsigned long *p=ebp;
*(p+1)就是呼叫函數的回傳位址。
p=*p,就是上一層函數的訊框
*(p+1)就是上一層函數的呼叫函數的回傳位址
可以一直透過這個追溯到最上面的那個函數。

阿神

這個和函數堆疊幀有關。
過程開始時,都會為目前這個過程建立一個棧幀,機器是用堆疊來傳遞過程參數,儲存回傳訊息的。 %ebp是幀指針,%esp是堆疊指針。你提的這兩句就是建棧的語句。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板