C語言函式棧幀解析

2022-09-24 13:15:09 字數 705 閱讀 7089

目錄

eax, ebx, ecx ...

ebp- 存放了指向函式棧幀棧底的位址

esp- 存放了指向函式棧幀棧頂的位址

函式被呼叫時,系統會在棧區為該函式開闢一塊棧空間,這個棧空間就是該函式的函式棧幀。

以main函式的呼叫為例

棧幀也叫過程活動記錄,是編譯器用來實現函式呼叫過程的一種資料結構。從邏輯上講,棧幀為乙個函式提供了執行環境。

棧是先用高位址再用低位址,棧幀控制和儲存了乙個函式所需要的各種資訊。

棧幀的維護離不開ebp和esp暫存器,ebp存放www.cppcns.com了指向棧幀的棧底位址的指標,esp則存放指向棧頂位址的指標。

以main函式為例:

環境為vs2019

​​#include

int add(int x, int y)

int main()

​要研究函式棧幀我們要研究c程式程式設計客棧的彙編**。如圖所示:

2.main函式 

main函式的函式棧幀的建立和資料初始化就完成了。

add函式程式設計客棧棧幀的建立和main函式棧幀建立是一樣的,值得注意的是,add函式執行結束後的返回值儲存在了暫存器eax中,就是避免add函式棧幀銷毀時,主函式無法訪問add返回值。由此可見函式返回值是如何返回的。

4.函式執行結束後系統進行了什麼操作

本文標題: c語言函式棧幀解析

本文位址:

C語言 深度理解函式 函式的棧幀

c語言函式是如何呼叫的呢?初學時我想當然地回答 從呼叫部分轉到函式部分逐句執行,就是那麼簡單啊,然而你有沒有想過 函式呼叫前需要做哪些準備工作?函式是如何傳參的?傳參後又是如何使用的?引數使用完後又是如何銷毀的?呼叫的整個過程是怎樣的呢?今天就通過下面這個簡單的 帶大家走進函式的世界,一 竟 inc...

C語言 棧幀 總結

棧幀也叫過程活動記錄,是編譯器用來實現過程 函式呼叫的一種資料結構。從邏輯上講,棧幀就是乙個函式執行的環境 函式引數 函式的區域性變數 函式執行完後返回到 等等。大概翻了翻,網上對於 棧幀 這塊的知識總結也都大同小異,根據程式除錯的彙編 一步步分析,看的人腦袋疼。所以在這裡我簡明扼要。在之前的 記憶...

C語言 函式呼叫過程(棧幀)

首先舉個栗子 include int add int x,int y int main 在這個程式裡,函式被呼叫才會發揮函式的功能,而函式的呼叫其實是乙個過程,在這個過程計算機要為函式開闢棧空間,用於本次函式臨時變數的儲存和現場保護,這塊空間稱為函式的棧幀。現場保護的作用是為了在呼叫完另乙個函式,返...