操做系統-C語言與彙編語言混合編程

從下圖的編譯過程就能夠很明顯的看出可執行文件的生成過程
操做系統-C語言與彙編語言混合編程
編譯小知識
1.源文件編譯後獲得目標文件-二進制文件
2.不一樣語言可編譯相同格式的目標文件
3.連接器負責將目標文件組裝獲得可執行文件編程

在這裏出現的一個問題-C語言中的函數調用是如何進行的?
在這裏須要對函數調用時棧的變化進行解釋
操做系統-C語言與彙編語言混合編程
ebp指向關鍵位置上半部分-高地址位置,包含了函數調用以前的信息,下部分低地址處函數調用後所使用的信息。
彙編語言棧的變化-執行入棧出棧的操做
C語言函數調用(如上圖所示)-ebp指向當前棧頂,esp指向的也是棧頂,當函數返回時,將函數所使用堆空間釋放,將棧頂指針寄存器位置改變,作法是將esp移動到基準位置ebp位置,以後ebp恢復以前的值(將其彈出),此時esp指向的是返回地址,結束以後esp指向參數的位置,在這裏須要介紹調用約定的概念ide

調用約定

1.參數從右到左入棧
2.函數調用者負責參數的入棧出棧
3.函數自己根據約定使用棧中參數
操做系統-C語言與彙編語言混合編程函數

GCC編譯器使用的棧幀佈局

操做系統-C語言與彙編語言混合編程
ebp是函數調用以及函數返回的核心寄存器
1.ebp寄存器位當前棧幀的基準
2.經過ebp可以獲取返回值地址、參數、局部變量等
操做系統-C語言與彙編語言混合編程
在接下來的會用實驗來進行驗證佈局

相關文章
相關標籤/搜索