概述
從事 Linux 開發的朋友們都不可避免地用到一些工具,比如 objcopy、nm、objdump、readelf 等等。其實這一系列的工具,就是所謂的 Binutils,當然 GNU 就表示它們都是可以自由地使用的 GNU 軟體。
GNU Binutils,是 GNU Binary Utilities 的簡寫,一般簡稱為 Binutils。中文可以翻譯為 GNU 的二進位工具集。顯然,Binutils 是一組二進位工具的集合。也就是說,Binutils 不是指某一個工具,而是指一組工具,並且這些工具都是專門針對於二進位的。注意,這裡千萬不要理解錯了,不是說這些 Binutils 工具只提供二進位檔案,而是說這些工具的目的是用於操作二進位檔案的,而不是針對於文本或者原始碼。
再說一遍:Binutils 工具是專門用於操作二進位的,而不是用於去操作或者編譯文本、原始碼的。
在 Linux 環境下,這種二進位檔案主要指 *.o 檔案和 elf 執行檔案。顯然,編譯原始碼的是 gcc,所以 Binutils 不包含 gcc(這是一種簡單的說法,實際上還是有很多關聯的)。 Binutils 工具
現在我們已經知道,Binutils 是一組工具集合,那到底包含了哪些工具呢。
Binutils 中比較重要的是 ld 和 as。
ld —— 連結器
將多個目標檔案,連結成一個可執行檔(或目標庫檔案)。
as —— 彙編器
將彙編原始碼,編譯為(目標)機器代碼。
另外還有下面這些相對次要的,但非常實用的工具:
addr2line
將地址轉換為(檔案名稱和)行號的工具,一般主要用於反組譯碼。
ar
用來操作(.a)檔案檔案,比如建立,修改,提取內容等
c++filt
Filter to demangle encoded C++ symbols
dlltool
Creates files for building and using DLLs
gold
一個新的,速度更快的,只針對於ELF的連結器(可能還不是很成熟穩定)。
gprof
Displays profiling information
nlmconv
Converts object code into an NLM
nm
列出目標檔案中的符號
objcopy
拷貝並翻譯(轉換)檔案,可用於不同格式的二進位檔案的轉換。
objdump
顯示目標檔案中的資訊。
ranlib
Generates an index to the contents of an archive
readelf
顯示 ELF 格式的(目標)檔案的資訊。
size
顯示目標檔案或(.a)檔案檔案中的節(section)的大小。
strings
顯示檔案中的(可列印)的字串資訊。
strip
去除符號。一般用來把可執行檔中的一些資訊(比如 debug 資訊)去除掉,以實現在不影響程式功能的前提下,減少可執行檔的大小,減少程式的空間佔用。
windmc
A Windows compatible message compiler
windres
A compiler for Windows resource files
官網:http://www.gnu.org/software/binutils/
文檔下載:http://download.csdn.net/download/luckydarcy/10016030