linux應用程式記憶體布局

2021-08-19 00:05:54 字數 804 閱讀 5251

對向高記憶體位址生長,棧想低記憶體位址生長

linux中所有的應用程式都是這個布局,每個應用程式都是從0x80480000這個位址開始的,這樣衝突嗎?不衝突,因為這個位址是乙個虛擬位址,linux中每個應用程式都有自己的虛擬位址空間。

第二行是資料段的記憶體位址範圍。

第三行是堆的記憶體位址範圍。

最後一行是棧的記憶體位址範圍。

#include 

#include

int a; //全域性未初始化變數

int b = 2; //全域性初始化變數

intstatic c; //全域性靜態未初始化變數

intstatic d = 4; //全域性靜態初始化變數

intconst e = 5; //全域性常量

int main()

e資料段

a、b、c、d、c、d

堆m_addr

棧a、b、e

堆:動態分配空間(malloc)

資料段:全域性變數(初始化或者未初始化),靜態變數(static)

**段:全域性常量(const)

readelf -s (可執行程式名) 

例如該應用程式:readelf -s addr 

檢視結果: 

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

linux應用程式中,記憶體布局

方法 通過檢視應用程式程序中的程序位址對映檔案實現。例如檢視2053號程序的記憶體布局 命令如下 cat proc 2053 maps 結果如下 通過我們的下面來程式分析各種 變數在程式中的記憶體位置。檔名 addr.c include include int a 全域性未初始化變數 int b 2...

linux應用程式中的記憶體布局講解

對向高記憶體位址生長,棧想低記憶體位址生長 linux的中所有的應用程式都是這個布局,每個應用程式都是從0x80480000這個位址開始的,這樣衝突嗎?不衝突,因為這個位址是乙個虛擬位址,linux中每個應用程式都有自己的虛擬位址空間。方法 通過檢視應用程式程序中的程序位址對映檔案實現。例如檢視20...

linux應用程式記憶體檢測 pmap

命令格式 pmap root localhost security pmap d 4993 4993 bash 08047000 596 r x 0000000000000000 003 00006 bash bash的 段 080dc000 28 rwx 0000000000094000 003 ...