GNU Binutils详解

版本：v1.0

Crifan Li

摘要

本文主要介绍了什么是GNU Binutils，以及Binutils都包含了哪些工具，每个工具的功能的解释，举例详解每个工具实际使用方法。

[提示] 本文提供多种格式供：
在线阅读 | HTML | HTMLs | PDF | CHM | TXT | RTF | WEBHELP
下载（7zip压缩包） | HTML | HTMLs | PDF | CHM | TXT | RTF | WEBHELP

HTML版本的在线地址为：

http://www.crifan.com/files/doc/docbook/binutils_intro/release/html/binutils_intro.html

有任何意见，建议，提交bug等，都欢迎去讨论组发帖讨论：

http://www.crifan.com/bbs/categories/binutils_intro/

2013-08-29

修订历史
修订 1.0 2013-08-29 crl
  1. 添加GNU Binutils的简介
  2. 把整体框架添加好了，待后续添加每个工具的详细功能和用法

版权 © 2013 Crifan, http://crifan.com

本文章遵从：署名-非商业性使用 2.5 中国大陆(CC BY-NC 2.5)

目录

前言
1. 本文目的
1. GNU Binutils介绍
1.1. 什么是GNU Binutils
1.2. GNU Binutils都包含哪些工具
1.2.1. Binutils中包含的主要工具
1.2.2. Binutils中包含的其他次要工具
2. Binutils之ld
3. Binutils之as
4. Binutils之addr2line
5. Binutils之ar
6. Binutils之c++filt
7. Binutils之dlltool
8. Binutils之gold
9. Binutils之gprof
10. Binutils之nlmconv
11. Binutils之nm
12. Binutils之objcopy
13. Binutils之objdump
14. Binutils之ranlib
15. Binutils之readelf
16. Binutils之size
17. Binutils之strings
18. Binutils之strip
19. Binutils之windmc
20. Binutils之winres
参考书目


前言

目录

1. 本文目的

1. 本文目的

话说，很久之前，从接触Linux开始，陆陆续续的，知道一些新名词，新工具，比如objcopy，nm等等。

包括后来折腾嵌入式开发，多多少少尝试这些工具的实际的使用，但是一直不是很清楚这些东西的真正来历。

知道后来，才知道，原来这一系列的工具，就是所谓的Binutils，然后才有了此文：

整理出来，Binutils是啥，包含哪些工具，都是如何使用的。

即：本文目的在于，将GNU Binutils中的各种工具，的功能解释一下，并且用实际例子，说明如何使用，以及主要是用来干啥的。

以实现，看了此文后，了解了GNU Binutils中各种工具的实际使用，并且对于编译链接等方面的知识，更加深入的了解。


第 1 章 GNU Binutils介绍

目录

1.1. 什么是GNU Binutils
1.2. GNU Binutils都包含哪些工具
1.2.1. Binutils中包含的主要工具
1.2.2. Binutils中包含的其他次要工具

相关旧帖：GNU binutils工具使用

相关旧帖：【整理】关于Toolchain,cross toolchain,cross compiler

1.1. 什么是GNU Binutils

GNU Binutils，即GNU Binary Utilities的简写，一般简称为Binutils。

GNU Binutils，中文可以翻译为GNU的二进制工具集。

参考官网GNU Binutils的解释，可以解释为：

GNU Binutils，是一组二进制工具的集合。

其中：

  • 一组

    一组的意思是，不止一个，很多个。

  • 二进制

    二进制的意思是，这些工具，都是专门针对于二进制的，去操作二进制的

    与二进制相对应的，至少有，文本，源代码

    换句话说，这些工具，不是用于去操作，编译文本的，不是用来编译源代码的，而是专门用于操作二进制的。

    而二进制的东西，此处主要指的是，源代码编译出来的目标(*.o)文件，(Linux下面的elf等)可执行文件等等。

  • 工具

    工具的意思是，这些东西，各有对对应的用途，可以用来干活，实现你所需要的目的，满足你的需求

    至于实现什么目的，满足什么需求，则是不同的工具，有其特定的用途，才有了后面要介绍的，针对每个工具，所去详细解释其用途和用法。


1.2. GNU Binutils都包含哪些工具

如上所述，Binutils，是一组工具的统称，其包含了很多工具。

Binutils主要包括了ld和as。

另外也包括了，相对次要的，但实际上也很常用的，其他工具，比如ar，nm，objcopy等等。

下面先简要的介绍一下，这些工具是什么，以及主要功能：

1.2.1. Binutils中包含的主要工具

  • ld

    链接器。

    将多个目标文件，链接成一个可执行文件（或目标库文件）。

  • as

    汇编器。

    将汇编源代码，编译为（目标）机器代码

1.2.2. Binutils中包含的其他次要工具

  • 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

而接下来的章节，就是详细的介绍每一个工具的详细功能和具体用法了。


第 2 章 Binutils之ld


第 3 章 Binutils之as


第 4 章 Binutils之addr2line


第 5 章 Binutils之ar


第 6 章 Binutils之c++filt


第 7 章 Binutils之dlltool


第 8 章 Binutils之gold


第 9 章 Binutils之gprof


第 10 章 Binutils之nlmconv


第 11 章 Binutils之nm


第 12 章 Binutils之objcopy


第 13 章 Binutils之objdump


第 14 章 Binutils之ranlib


第 15 章 Binutils之readelf


第 16 章 Binutils之size


第 17 章 Binutils之strings


第 18 章 Binutils之strip


第 19 章 Binutils之windmc


第 20 章 Binutils之winres


参考书目

[1] crifan的的库函数：crifanLib

[2] crifan的C#库：crifanLib.cs