1.查看.o目標文件用objdump 命令, 參數“-h"就是把ELF文件的各個段的基本信息打印出來。也可以使用-X打印更多的信息。
段的屬性,Size是段的長度,FIle off 是段開始的位置,每個段的第二行中“CONTENTS”、“ALLOC”等表示段的屬性,“CONTENTS”表示
該段在文件中存在。雖然BSS段沒有“CONTENTS”,表示它實際在ELF文件中並不存在。
2. 可以用Size命令來查看ELF文件的代碼段、數據段和BSS段的長度;
3. .data段保存的是那些已經初始化了的全局變量和局部靜態變量。
.rodata.段存放的是隻讀數據,一般是程序裏面的只讀變量(如const修飾的變量)和字符串常量。
.bss段存放的是未初始化的全局變量和局部靜態變量。
出來這些常用的段,ELF文件還有其他的段,用於保存與程序相關的其它信息。這些段的名字都是“.”作爲前綴,表示這些表達名字是
系統保留的,應用程序也可以使用一些非系統保留 的名字作爲段名。比如可以加以個music的段,用於存放歌曲,但是應用程序自定義的
段名不能使用“.” 作爲前綴,否則很容易和系統保留段名衝突。
GCC提供一個擴展機制,使得程序員可以指定變量或者函數所處的段:
__attribute__( (section("Bar")) ) int global = 23; 注意attribute前後各有兩個下劃線。