堆疊呼叫方式

2021-08-13 20:53:32 字數 540 閱讀 5924

ebp:棧底指標暫存器

esp:棧頂指標暫存器

eax:累加暫存器

esi/edi:源/目標索引暫存器

ecx:計數器

1、返回:返回值是怎麼帶出來的?

答:eax暫存器(四個位元組)

(8個位元組)2個暫存器帶出 eax ebx

2、函式呼叫後怎麼知道回到呼叫方?

答:在被呼叫一開始壓入呼叫方的棧底該指標暫存器ebp

3、函式呼叫後怎麼知道從呼叫點的下一行開始?

ret返回給下一行指令暫存器

4、實參怎麼傳給形參?

答:呼叫方開闢空間

5、怎麼釋放?

答:呼叫方釋放

反彙編指令:

objdump:檢視elf檔案的段

-s反彙編

readelf:檢視elf檔案

-h頭-s段的大小

call:近址相對位移偏移指令

(2)pop()

ld -e:手動編譯

ld -e main sum.o main.o run

函式呼叫堆疊

一 函式呼叫堆疊 認真體會每一行指令位址!include intsum int a,int b mov ebp,esp 讓esp回退到ebp的位置,回退棧幀的過程中,沒有對棧幀中的值進行清0的操作 pop ebp 出棧並把出棧的值賦給ebp int main 下圖為上面示例函式,程式在sum函式中,...

函式呼叫堆疊

一 棧 1 傳統的棧 被定義為乙個特殊的容器,使用者可以將資料壓入棧中,也可以將壓入 棧中的資料彈出,但必須遵守一條規則 先進後出。2 計算機系統中的棧 是乙個有以上屬性的動態記憶體區域,壓棧操作使得棧增大,彈出操作使棧減小。棧通常是向下增長的。3 最重要的是棧儲存了乙個函式呼叫所需的維護資訊,這通...

函式呼叫堆疊

乙個函式的執行在棧上開闢記憶體。在函式呼叫時,第乙個進棧的是主函式呼叫語句的下一條可執行語句的位址,然後是函式的各個引數。在大多編譯器中,引數是由右往左入棧的,然後再是函式中的區域性變數。下面給乙個例項 int sum int a,int b int main 其中,main函式的反彙編指令 其中,...