1. 程式人生 > 實用技巧 >關於函式呼叫中堆疊維護的原理

關於函式呼叫中堆疊維護的原理

1.每個函式呼叫的棧幀組成 old ebp 、暫存器資訊、區域性變數、函式入參、呼叫的返回地址

2.需要注意的是,幀棧每次操作push 或者是 pop 幀指標esp 都會自動自減或者是自增

2.每次呼叫函式之前都有下面的彙編操作

push ebp

mov esp ebp

所以ebp指標指向的是,每個函式幀棧push ebp 之後的地址,old ebp儲存的是上一層函式呼叫的棧幀的基地址

3.返回,在函式呼叫返回之前,都會有下面的彙編操作

mov ebp esp

pop %ebp

這兩句話的意思是把ebp的地址值賦值給esp,相當於把esp回退值ebp處;在當前的esp地址上,pop一個值,賦值給ebp,其實就是把ebp指標回退到上一個函式呼叫的基地址。

pop操作之後,esp指標會回退至這個函式呼叫時候的棧頂處,也就是上一個函式呼叫的末尾處,與此同時ebp指向了上一個函式呼叫的棧幀的的基地址。

4.依次類推,直至全部函式呼叫返回。

5.理解的關鍵是棧幀的結構,以及ebp具體的位置是在哪裡,這點很關鍵。