其他 棧 和 函式呼叫

2021-10-20 08:29:26 字數 344 閱讀 1412

程式 = 演算法 + 資料結構

演算法 = 記憶體正文區(.text)的執行邏輯

資料結構 = 堆 + 棧 + 其他資料儲存區

棧是程序虛擬記憶體模型中的一塊連續記憶體區域,不同的作業系統對於虛擬記憶體的劃分策略存在一定的差異,但是不論是什麼作業系統都會流出一大塊記憶體區用作棧空間(大多數情況下是堆和棧共享)。

x86架構下,棧是向著低位址蔓延的,堆是向著高位址蔓延的。每一次函式呼叫,暫存器組都會重新被賦予一套值,這套值表明了當前函式的棧幀範圍,當函式執行完畢時,暫存器組會被重新賦值以回退到父函式的函式呼叫幀中。

函式自己的棧幀只存放自己的區域性變數,函式的入參存放在其父函式的棧幀中,因為他們是父函式的區域性變數。

棧和函式呼叫

pushl ebp movl esp ebp 棧底方向 高位位址 引數3 引數2 引數1 返回位址 上一層 ebp ebp 區域性變數 低位位址函式呼叫棧結構 這兩條彙編指令的含義是 首先將ebp暫存器入棧,然後將棧頂指標esp賦值給ebp。mov ebp esp 這條指令表面上看是用esp覆蓋eb...

函式呼叫棧

當程式進行函式呼叫的時候,系統會用到下面三種暫存器 3.ebp ebp暫存器裡儲存的是棧基址,是在函式呼叫之前,由esp賦值給ebp的。棧底方向,高位位址 call fun arg1,arg2,arg3 修改esp,棧向下增長,引數入棧,返回位址入棧 arg3 arg2 arg1 返回位址 上一層e...

棧 函式呼叫

編譯以下程式,分析此程式以得出棧的精髓 1 主函式被上層呼叫者呼叫後,執行push ebp,esp 4 因為ebp入棧 ebp值沒有改變,值得注意的是剛開始分配站的時候,第乙個入棧的是return,主函式的返回位址,然後是ebp 2 然後是mov ebp,esp,將esp的值賦給ebp,該語句未執行...