第4課 Linux應用程式位址布局

2022-08-11 14:30:10 字數 931 閱讀 5889

1.應用程式都是由**段,資料段,bss段以及堆空間,棧空間組成。

2.布局方式:

(1)**段在最低位址處,一般都是從0x8048000開始,這是虛擬位址,每乙個應用程式都是這樣的

(2)資料段緊貼著**段

(3)在往上是bss段其實也是一種資料段

(4)在往上是堆空間,堆空間是往上增長的

(5)定不一般是棧空間,棧空間是向下生長

2.檢視各個段的位址

(1)在應用程式裡面,末尾處加上while迴圈,防止程式結束後我們都還來不及檢視

(2)編譯成可執行程式並執行

(3)用#ps aux命令檢視你的應用程式的pid

(4)開啟另乙個終端,用cat命令檢視檔案資訊

比如#cat  /proc/(pid of your program)/maps

(5)**段是唯讀的,而且可執行

(6)資料段是可寫的

(7)堆空間是heap。棧空間是stack

3.資料存放

(1)全域性變數,不管是初始化的還是未初始化的,以及靜態的是否初始化的都是在資料段

(2)全域性常量(唯讀變數)是存放在**段

(3)非靜態區域性變數,不管是初始化的還是未初始化的都是在棧

(4)靜態的區域性變數,不管是初始化的還是非初始化的,都是在資料段

(5)區域性常量(唯讀變數)在棧

(6)通過malloc分配出的區域性變數在堆。

(7)字串常量,不管是區域性還是全域性都在**段

4.關於bss段

(1)使用readelf工具檢視。

(2)用file檢視可執行程式的屬性

(3)linux下編譯出的可執行應用程式是elf格式的

(4)readelf  -s (可執行程式名)

(5)bss段存放的是未初始化的資料(變數),只要是存放在資料段(大概念)又沒有初始化的就存在這裡。

Linux應用程式位址分布

1 記憶體組成 2 記憶體布局 linux所有應用程式都是從0x80480000開始,其中0x80480000是乙個虛擬位址 1 下面來測試一下應用程式的位址分布 include include int global init a 1 全域性的,初始化的變數 資料段 int global unini...

Linux 1 4 應用程式位址布局

1 記憶體組成 2 記憶體布局 linux所有應用程式都是從0x80480000開始,其中0x80480000是乙個虛擬位址 1 下面來測試一下應用程式的位址分布 include include int global init a 1 全域性的,初始化的變數 資料段 int global unini...

Linux 應用程式的位址空間分布

linux 應用程式在被核心調入記憶體中執行後就成為乙個程序,因此分析應用程式的位址空間實際上就是分析程序的位址空間分布。應用程式的位址空間實際上由以下幾個部分組成 段 初始化資料段 未初始化資料段 bss段 堆 棧。其在記憶體中的分布如下 apue給出了各個段所包含內容的詳細介紹,這裡筆者用乙個比...