堆和棧的理解
一、什麼是棧楨
2、棧幀表示程式的函式呼叫記錄,而棧幀又是記錄在棧上面,很明顯棧上保持了n個棧幀的實體,(實際上我們這裡說的棧幀是軟體上的概念,據說有硬體概念,不是很了解),那就可以說棧幀將分割成了n個記錄塊,但是這些記錄塊大小不是固定不變的,因為棧不僅儲存諸如:函式入參,出參,返回位址和上乙個棧幀的棧底指標等資訊,還儲存了函式內部的自動變數,因此不是所有的棧幀的大小都是相同。
二、直接上**分析
1、這是乙個簡單的函式呼叫程式
//源**
#include
int myfun(int x,int y)
int main()
2、上面函式的彙編**(下面有逐步講解)
//彙編**
9: int main()
10:
004010b9 pop edi
004010ba pop esi
004010bb pop ebx
004010bc add esp,4ch
004010bf cmp ebp,esp
004010c1 call __chkesp (00401170)
004010c6 mov esp,ebp
004010c8 pop ebp
004010c9 ret
3、分析彙編**(1)下面彙編**不用關心,是因為main函式也是被其他函式所呼叫地,
需要儲存儲存斷點位址和資料資訊。我們這次主要討論main函式裡面
呼叫其他子函式的過程,所以分析main函式被呼叫的過程。
執行ret相當於pop棧頂資料到eip
(9)函式呼叫結束,返回到main函式
C語言 函式呼叫過程(棧幀)
首先舉個栗子 include int add int x,int y int main 在這個程式裡,函式被呼叫才會發揮函式的功能,而函式的呼叫其實是乙個過程,在這個過程計算機要為函式開闢棧空間,用於本次函式臨時變數的儲存和現場保護,這塊空間稱為函式的棧幀。現場保護的作用是為了在呼叫完另乙個函式,返...
C語言函式呼叫過程 棧幀
在學習過函式宣告和定義,了解了函式的引數 實參 形參 引數的設計 函式的使用等一些函式基礎知識之後,函式逐漸變為我們編寫 時重要工具。無論是編寫時引用的庫函式,還是實現程式部分功能時使用的自定義函式,都體現函式的重要性。函式特點 使 開發更高效 提高 復用性 使 邏輯更加清晰。函式所佔據的重要地位,...
函式呼叫過程(棧幀)
眾所周知,程式每呼叫乙個函式,系統都會為其開闢一塊空間,當它返回時,才收回這塊空間。程式崩潰有一部分原因就是因為無限制的呼叫函式,卻沒有及時返回,導致記憶體空間不夠。為了更好的維護這一塊空間 通常稱為棧空間 我們需要了解兩個暫存器,乙個為 esp 指向棧頂的指標 乙個為 ebp 指向棧底的指標 棧空...