Binutils (2.14):
ftp://ftp.gnu.org/gnu/binutils/
Binutils的内容
Binutils 是一組開發工具,包括連接配接器,彙編器和其他用于目标檔案和檔案的工具。
安裝下列程式: addr2line, ar, as, c++filt, gprof, ld, nm, objcopy, objdump, ranlib, readelf, size, strings 和 strip
安裝下列庫檔案: libiberty.a, libbfd.[a,so] 和 libopcodes.[a,so]
· as GNU的彙編器
作為 GNU Binutils工具集中最重要的工具之一。as工具主要用來将彙編語言編寫的源程
序轉換成二進制形式的目标代碼。Linux平台的标準彙編器是GAS,它是 GNU GCC編譯器
所依賴的背景彙編工具,通常包含在 Binutils軟體包中。
· ld GNU的連結器
同as一樣,ld也是GNU Binutils工具集中重要的工具,Linux 使用 ld作為标準的連結程
序,由彙編器産生的目标代碼是不能直接在計算機上運作的,它必須經過連結器的處理才能
生成可執行代碼,連結是建立一個可執行程式的最後一個步驟,ld可以将多個目标檔案連結
成為可執行程式,同時指定了程式在運作時是如何執行的。
· add2line 将位址轉換成檔案名或行号對,以便調試程式
· ar 從檔案中建立、修改、擴充檔案
· gasp 彙編宏處理器
· nm 從目标代碼檔案中列舉所有變量(包括變量值和變量類型),如果沒有指定目标
檔案,則預設是a.out檔案
· objcopy objcopy工具使用GNU BSD 庫,它可以把目标檔案的内容從一種檔案格式
複制到另一種格式的目标檔案中
在預設的情況下, GNU編譯器生成的目标檔案格式為elf格式, elf檔案由若幹段 (section)
組成,如果不作特殊指明,由 C 源程式生成的目标代碼中包含如下段:.text(正文段)包含
程式的指令代碼;.data(資料段)包含固定的資料,如常量、字元串;.bss(未初始化資料段)
包含未初始化的變量、 數組等。 C++源程式生成的目标代碼中還包括.fini (析構函數代碼)和.init
(構造函數代碼)等。連結生成的elf格式檔案還不能直接下載下傳到目标平台來運作執行,需要
通過 objcopy 工具生成最終的二進制檔案。連接配接器的任務就是将多個目标檔案的.text、.data
和.bss等段連接配接在一起,而連接配接腳本檔案是告訴連接配接器從什麼位址開始放置這些段。
· add2line 把程式位址轉換為檔案名和行号
在指令行中帶一個位址和一個可執行檔案名,它就會使用這個可執行檔案的調試資訊指
出在給出的位址上是哪個檔案以及行号。
· objdump 顯示目标檔案資訊
objdump工具可以反編譯二進制檔案,也可以對對象檔案進行反彙編,并檢視機器代碼。
· readelf 顯示elf檔案資訊
readelf指令可以顯示符号、段資訊、二進制檔案格式的資訊等,這在分析編譯器如何從
源代碼建立二進制檔案時非常有用。
· ranlib 生成索引以加快對歸檔檔案的通路,并将其儲存到這個歸檔檔案中
在索引中列出了歸檔檔案各成員所定義的可重配置設定目标檔案。
· size 列出目标子產品或檔案的代碼尺寸
size 指令可以列出目标檔案每一段的大小以及總體的大小。預設情況下,對于每個目标
檔案或者一個歸檔檔案中的每個子產品隻産生一行輸出。
· strings 列印可列印的目标代碼字元(至少 4 個字元) ,列印字元多少可以控制
對于其他格式的檔案,列印字元串。列印某個檔案的可列印字元串,這些字元串最少 4
個字元長,也可以使用選項“-n”設定字元串的最小長度。預設情況下,它隻列印目标檔案
初始化和可加載段中的可列印字元;對于其他類型的檔案它列印整個檔案的可列印字元,這
個程式對于了解非文本檔案的内容很有幫助。
· strip 放棄所有符号連接配接
删除目标檔案中的全部或者特定符号。
· c++filt 連結器ld使用該指令可以過濾 C++符号和 Java 符号,防止重載函數沖突
· gprof 顯示程式調用段的各種資料