push %ebp movl %esp, %ebp
是什么意思?有什么作用?为什么要这样做???
欢迎选择我的课程,让我们一起见证您的进步~~
ebp是幀指針,esp是棧指針。這兩行程式碼是保存舊的幀,創建新的堆疊幀。彙編裡的過程呼叫需要這個動作
創建stack frame,可以優化掉。保留這個主要方便調試,可以追溯函數呼叫鏈。 unsigned long *p=ebp;*(p+1)就是呼叫函數的回傳位址。 p=*p,就是上一層函數的訊框*(p+1)就是上一層函數的呼叫函數的回傳位址可以一直透過這個追溯到最上面的那個函數。
這個和函數堆疊幀有關。 過程開始時,都會為目前這個過程建立一個棧幀,機器是用堆疊來傳遞過程參數,儲存回傳訊息的。 %ebp是幀指針,%esp是堆疊指針。你提的這兩句就是建棧的語句。
ebp是幀指針,esp是棧指針。這兩行程式碼是保存舊的幀,創建新的堆疊幀。彙編裡的過程呼叫需要這個動作
創建stack frame,可以優化掉。保留這個主要方便調試,可以追溯函數呼叫鏈。
unsigned long *p=ebp;
*(p+1)就是呼叫函數的回傳位址。
p=*p,就是上一層函數的訊框
*(p+1)就是上一層函數的呼叫函數的回傳位址
可以一直透過這個追溯到最上面的那個函數。
這個和函數堆疊幀有關。
過程開始時,都會為目前這個過程建立一個棧幀,機器是用堆疊來傳遞過程參數,儲存回傳訊息的。 %ebp是幀指針,%esp是堆疊指針。你提的這兩句就是建棧的語句。