C 函式的堆疊呼叫過程

2021-08-31 18:57:50 字數 623 閱讀 8943

一、函式的堆疊呼叫

以簡單求和**為例具體分析:

#includeint sum(int a ,int b)

int main()

首先明確一下指令:

1.移動資料:mov , dword  ptr[ebp-4],0ah    即:int a=10;

3.壓棧:push 0ah

4.出棧:pop eax    即:eax=pop()

5.加:add eax,0ah   即:eax+=0a

6.減:sub eax,0ah   即:eax-=0a

7.呼叫函式:call

8.返回值:ret

9.暫存器:eax、ebx、ecx、edx

11.esp:棧頂指標暫存器

12.pc:下一行指令暫存器

簡單總結堆疊呼叫過程如下:

1.形參初始化

3.壓入呼叫方的棧底指標暫存器的值

4.移動ebp到呼叫方棧底

5.開闢區域性變數活動所需要的棧空間,並初始化為cccc cccc 

C 函式呼叫過程

int fun1 int a,int b int main 將彙編 執行到函式呼叫的地方,檢視函式呼叫引數帶入的指令。int a fun1 10,20 0131141e push 14h 01311420 push 0ah 01311422 call fun1 0131118bh 引數順序是10,2...

C函式的呼叫過程

c函式的引數傳遞過程 基礎知識 函式呼叫的本質將在這裡得到闡明。首先請讀者理解堆疊的操作。函式和堆疊的關係密切,這是因為 c語言程式通過堆疊把引數從函式外部傳入到函式內部。此外,在堆疊中劃分區域來容納函式的內部變數。呼叫push和pop指令的時候,暫存器 esp用於指向棧頂的位置 棧頂總是棧中位址最...

函式呼叫過程

每乙個未執行完的函式都對應著乙個棧幀,系統為單個函式分配的那部分棧空間就叫做棧幀,棧幀儲存了函式的資訊。以下面的 為例,通過彙編 的執行過程介紹棧幀建立和銷毀的過程 include int add int x,int y int main 從main函式建立自己的棧幀開始 其他內容先忽略 初始狀態 ...