對向高記憶體位址生長,棧想低記憶體位址生長
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 ...