Binutils简介
Binutils目录结构
├── bfd
├── binutils
├── config
├── cpu
├── elfcpp
├── etc
├── gas
├── gold
├── gprof
├── include
├── intl
├── ld
├── libctf
├── libiberty
├── opcodes
├── texinfo
└── zlib
从目录结构来看,binutils中的大多数组件没有相应的顶层目录,很多都是位于binutils子目录中。Binutils组件内部包含了一些库,这些>库不仅可以在Binutils内部使用,也提供给外部其他项目使用。例如:BFD库也会被gdb调试器调用。库都具备相应的顶层目录。
简单介绍每个目录的作用
- includel目录:
该目录是整个Binutils中主要的头文件目录。该目录下一层又包含了gdb,elf,coff,opcode cgens等子目录,分别用于对应组件的头文件支持。
bfd目录: - bfd目录:
二进制文件描述信息的库,该库包含了处理特定格式的一进制文件的代码,例如ELF、COFF、SEC等。如课需要添加新的可识别目标文件格式,则需要修改该库的代码。 - opcodes目录
操作码库,该库指定了如何对cpU指令进行汇编(assemble)和反汇编(disassemble)操作相关信息。 - cpu目录:
该目录主要为CGEN工具的使用提供相应的支持。CGEN架构的…cpu.opc文件,生成日标架构对应的汇编器((assemble0、反汇编器
(disassembler)以及SiM模拟器等。 - binutils目录
尽管该日的名字跟顶层目录Binutls重名,但它文际上是Binutils中所有没有自己顶层目录工具的源文什集合,这中包括了诸如
objcopy、objdump、readelf、ar、c++flit、size、strings等t组件。 - gas目录:
GNU的汇编器(assembler)目录,其中与目标架构相关的汇编程序代码保存在gas/config子目录一层中,这些文件都是以tc-<target >.c的形式存在。 - ld目录:
GNU的链接器(linker)目录,其中与目标架构相关的文件保存在该目录下emulparams子自录中。 - gprof目录:
GNU的分析器(profiler)目录,该目录下不包含任何与目标架构相关的代码或信息。 - gold目录:
一款新的GNU链接器,其目的在于替换到旧的d链接器。相对于ld链接器gold链接器具有更快的速度和效率,但是其稳定性不如ld链接器,其功能尚在完善和开发中。 - elfcpp目录:
elfcpp是一个C++库,主要用于读取和写入ELF文件信息。目前只有gold链接器会使用到此库。
此外,在Binutils顶层源码目录中,还有一些其他组件的目录。他们本身并不是Binutils的一部分,只是在构建Binutils时需要用到这些组件,包括:
- intl目录
GNU gettext库目录,该库来源于gettext工具,具体来说GNU gettext是一组工具,它提供了一个框架来帮助其他GNU软件包生成更多语言信息。 - libiberty目录
在POXS标准和glibc库泛应用之前,libiberty是一个GNU的项目。其主要目的在于提供了一整套标准函数的接口,libiberty库最有价值的地方在于其免费的存储管理功能。 - zilb目录:
zlibb是提供数据压缩用的函数库,其使用DEFLATE筒法,它提供了一套压缩和解压函数,并能检测解压出来的数据的完整性(integrity)。此外,zilb也支持读写gzip(.gz)的文件。