概述
从事 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/