天天看點

你知道 GNU Binutils 嗎?

概述

  從事 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

繼續閱讀