第三章:挖掘SimpleSection.o

     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前後各有兩個下劃線。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章