Linux程序的棧和程序中函式的棧幀及其結構

2022-10-10 06:27:07 字數 884 閱讀 7474

主要理解了linux程序的棧和函式的棧幀的區別和聯絡

linux系統中為每個程序分配的實際大小未做深究

linux程序的棧的整體認知就是這麼多,即

1)棧底在0xc0000000(並不需要棧底指標,函式的棧幀才需要棧底指標)

2)棧的增長方向,位址遞減方向

3)棧頂指標esp

4)大小未知(不是本文關注的重點)

5)裡面存放的內容是什麼呢?

程序的棧中存放的是函式呼叫的棧幀

即另乙個概念是上文中提到的函式的棧幀的概念及其與linux程序棧的關係

函式的棧幀就在程序中的棧的結構和分配的位址空間及實際記憶體中

函式的棧幀整體的理解是:

1)ebp是函式棧幀的棧底

2)esp是棧頂(乙個函式的活動記錄就在ebp(高位址)和esp(低位址)之間)

3)乙個程序的所有的函式的棧幀在呼叫此函式的時候建立,返**用者後,被調函式的棧幀不再存在

4)所有的函式的棧幀的建立和消失是隨著程序的執行而變化的乙個動態過程

5)棧幀中存放的內容是什麼呢?

棧幀中存放的內容一般包括以下幾個方面的內容:

1)函式的返回位址和引數

2)臨時變數:包括函式的非靜態區域性變數和編譯器自動生成的其他變數

3)儲存的上下文:包括在函式呼叫前後需要保證不變的暫存器值

程序中的函式在程序提供的棧中要解決的是呼叫者和被調者的關係

1)如何從呼叫者進入被調者?call

2)如何從被調者返**用者?ret

3)呼叫者如何支配被調者(被調函式引數傳遞)?引數

4)被調者的價值如何體現(返回值的傳遞)?暫存器eax、edx

其中還有兩個問題值得去看

1)被調函式返回值的傳遞方式

2)函式的呼叫慣例

linux 中的僵死程序和孤兒程序

當我們使用建立程序的函式fork vfork 等,建立了子程序 1.子程序先於父親程序退出,會造成子程序的程序編號無法釋放.程序編號的範圍很大,但不應該隨意浪費 2.子程序後於父親程序退出,子程序會交給init 程序管理.3.乙個程序在執行完畢後,系統會自動清空其存在的程序的相關資源 結合上面說明,...

執行緒棧和程序棧

pthread create 建立執行緒時,若不指定分配堆疊大小,系統會分配預設值,通過命令檢視方法如下 上面的單位為 kb,所以,執行緒預設堆疊大小為 8m。也可以在終端下通過 ulimit s value 用來重新設定 stack 大小。一般來說,預設堆疊大小為 8388608,堆疊最小為 16...

簡述Linux中的孤兒程序和殭屍程序

父程序先於子程序終止,則子程序變成孤兒程序 乙個臨時中間狀態 系統很快將孤兒程序的父程序設定為init init程序 孤兒領養程序 孤兒收養院 作用 負責作為孤兒程序的父程序,在孤兒程序終止後,程序釋放資源 孤兒程序產生 include include include intmain if pid ...