push %ebp
movl %esp, %ebp
是什么意思?有什么作用?为什么要这样做???
天蓬老师2017-04-17 13:09:07
創建stack frame,可以優化掉。保留這個主要方便調試,可以追溯函數呼叫鏈。
unsigned long *p=ebp;
*(p+1)就是呼叫函數的回傳位址。
p=*p,就是上一層函數的訊框
*(p+1)就是上一層函數的呼叫函數的回傳位址
可以一直透過這個追溯到最上面的那個函數。
阿神2017-04-17 13:09:07
這個和函數堆疊幀有關。
過程開始時,都會為目前這個過程建立一個棧幀,機器是用堆疊來傳遞過程參數,儲存回傳訊息的。 %ebp是幀指針,%esp是堆疊指針。你提的這兩句就是建棧的語句。