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給出了各個段所包含內容的詳細介紹,這裡筆者用乙個比...