hollow各位程式猿,當我們學習編程時有沒有和我一樣有這種困惑
比如變數是如何創建的?
為何區域變數是隨機值?
函式回傳呼叫是如何傳遞引數?
和函式是如何回傳的?
這里我用的編譯器是VS2019接下來我將帶著大家了解函式堆疊幀是如何創建銷毀 注:函式堆疊幀創建銷毀每個編譯器不一定會相同
如有疏漏之處歡迎大佬指出和討論,瑞斯拜 瑞斯拜

此時我們創建一個函式并且呼叫它
而呼叫函式就會用到暫存器此時我們用到的暫存器有這兩個
esp ebp

此時我們記憶體空間里的堆疊區里面是這樣
然后開始函式呼叫此時記憶體中ebp開始壓堆疊


下一步然后記憶體中ebp和esp開辟了為main函式所創建變數的空間

此時main函式開始創建變數

Add函式,開始呼叫計算計算完成的值賦給eax,此時我們的計算已經完成,接下來呼叫的值開始回傳

這時esp的值從esl開始回傳函式,esp每次增加4位元組直到回傳到edp所在位置,edp將值賦予esp,esp所處地址在下到edp,esp再增加4
位元組,然后執行ret回傳call指令的下一行

最后一步main函式回傳堆疊幀
這就是今天給大家圖解的如何創建銷毀函式堆疊幀,
希望可以幫到大家,如有錯誤歡迎指出
輕點噴 各位大佬們 哈哈
求點贊 求點贊 求點贊 素質三連
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/300280.html
標籤:其他

