成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

函數棧幀解析

MonoLog / 3383人閱讀

摘要:函數棧幀的銷毀匯編語言了解函數傳參函數返回值如何返回函數中變量如何初始化和賦值函數執(zhí)行結束后系統(tǒng)進行了什么操作

文章目錄


一、什么是函數棧幀

?1.寄存器:

eax, ebx, ecx ...

ebp - 存放了指向函數棧幀棧底的地址
esp - 存放了指向函數棧幀棧頂的地址

2.函數棧幀

函數被調用時,系統(tǒng)會在棧區(qū)為該函數開辟一塊??臻g,這個??臻g就是該函數的函數棧幀。

以main函數的調用為例

?3.棧幀的作用和維護

????????棧幀也叫過程活動記錄,是編譯器用來實現函數調用過程的一種數據結構。從邏輯上講,棧幀為一個函數提供了執(zhí)行環(huán)境。

????????棧是先用高地址再用低地址,棧幀控制和保存了一個函數所需要的各種信息。

????????棧幀的維護離不開ebp和esp寄存器,ebp存放了指向棧幀的棧底地址的指針,esp則存放指向棧頂地址的指針。

?4.棧幀結構

以main函數為例:

?

?

二、函數棧幀的創(chuàng)建

環(huán)境為VS2019

??#includeint ADD(int x, int y){    int z=0;    z=x+y;	return z;}int main(){	int a = 10;	int b = 20;	int c = 0;	c = ADD(a, b);	return 0;}??

1.匯編代碼

要研究函數棧幀我們要研究c程序的匯編代碼。如圖所示:

?

?

?

2.main函數

?


?

?

2.棧幀創(chuàng)建:

?

3.步驟

?

?

?

?

?

main函數的函數棧幀的創(chuàng)建和數據初始化就完成了。

?3.ADD函數棧幀的創(chuàng)建

?add函數棧幀的創(chuàng)建和main函數棧幀創(chuàng)建是一樣的,值得注意的是,ADD函數執(zhí)行結束后的返回值保存在了寄存器eax中,就是避免ADD函數棧幀銷毀時,主函數無法訪問ADD返回值。由此可見函數返回值是如何返回的。

3.函數棧幀的銷毀

1.匯編語言

?4.了解

1.函數傳參

?2.函數返回值如何返回

?3.函數中變量如何初始化和賦值

5.函數執(zhí)行結束后系統(tǒng)進行了什么操作

?

?

?

?

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/119302.html

相關文章

  • 【C語言知識精講②】函數棧幀的創(chuàng)建和銷毀(全程圖解)

    摘要:這里分塊講解六函數棧幀的銷毀過程一解析的作用是將棧頂的數據彈出,彈出數據儲存到相應寄存器中。 ?前言? 讀完這篇博客,你可以明白什么? ①局部變量到底是怎么在棧上創(chuàng)建的? ②為什么局部變量不初始化為隨機值? ③函數是怎么傳參的?傳參的先后順序是什么? ④形參和實參是什么關系? ⑤函數調用是怎...

    davidac 評論0 收藏0
  • 淺析javascript調用棧

    摘要:調用棧是一種棧結構它用來存儲計算機程序執(zhí)行時候其活躍子程序的信息。調用棧是解析器的一種機制。并形成一個棧幀任何被這個函數調用的函數會進一步添加到調用棧中,形成另一個棧幀并且運行到它們被上個程序調用的位置。然后調用棧繼續(xù)運行其他部門。 大家在進行javascript開發(fā)的時候,有沒有想過,我們寫的代碼是怎么樣運行的呢?下面我們就來剖析一下代碼的執(zhí)行過程。 一 什么是調用棧 代碼在運行過程...

    diabloneo 評論0 收藏0
  • python學習筆記之一(.py文件里輸入中文報錯)

    摘要:定義默認參數要牢記一點默認參數必須指向不變對象尾遞歸調用函數本身,但是的返回值不包含表達式。而尾指針相當于把常規(guī)的遞歸反過來,增加一層遞歸的同時釋放前一個遞歸指針,所以能夠始終保持只有一個棧幀在使用中。 教程 1、python大小寫敏感 如果字符串里面有很多字符都需要轉義,就需要加很多,為了簡化,Python還允許用r表示內部的字符串默認不轉義 >>> print ...

    heartFollower 評論0 收藏0
  • 【Java系列】從字節(jié)碼角度深度理解Java函數調用傳參方式

    摘要:下文將從字節(jié)碼的角度,分析中基本類型傳參和對象傳參。主函數執(zhí)行時,操作棧會推入主函數棧幀,其中包含了主函數的局部變量表,字節(jié)碼,返回值等信息。主函數的棧幀會被推入棧,成為當前操作棧。 個人網站地址: http://kailuncen.me/2017/06/0... 一個小問題 在開源中國看到這樣一則問題 https://www.oschina.net/quest...,其中的變量a前...

    LdhAndroid 評論0 收藏0
  • java中的棧幀

    摘要:對于執(zhí)行引擎來說,在活動線程中,只有位于棧頂的棧幀才是最有效的稱為當前棧幀與這個棧幀相關聯(lián)的方法稱為當前方法。執(zhí)行引擎運行的所有的字節(jié)碼指令都只針對當前棧幀進行操作。 showImg(https://segmentfault.com/img/bVbvueY?w=1600&h=800); 棧幀數據結構 棧幀(Stack Frame)是用來支持虛擬機進行方法調用和方法執(zhí)行的數據結構,它是虛...

    jeyhan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<