BFD库
由于现代的硬件和软件平台种类非常繁多,它们之间千差万别。比如,硬件中CPU有8/16/64位的;字节序有大端/小端的;有些对访问内存地址对齐有着特殊要求;有些有MMU。软件平台有些支持动态链接;有些支持调试。这些五花八门的软硬件平台导致了每个平台都有它独特的目标文件,即使同一个格式比如ELF在不同的软硬件平台都有着不同的变种。
BFD库(Binary File Descriptor library)就是这样的一个GNU项目,它的目标就是希望通过一种统一的接口来处理不同的目标文件格式。BFD这个项目本身是binutils项目的一个子项目。BFD把目标文件抽象成一个统一的模型,使得BFD库的程序只要通过操作这个抽象的目标文件模型就可以实现操作所有BFD支持的目标文件格式。
现在GCC(更具体地讲是GNU汇编器GAS,GNU Assembler)、链接器ld、调试器GDB及binutils的其他工具都通过BFD库来处理目标文件,而不是直接操作目标文件。这样做最大的好处是将编译器和链接器本身同具体的目标文件格式隔离开来,一旦我们需要支持一种新的目标文件格式,只需要在BFD库里面添加一种格式就可以了,而不需要修改编译器和链接器。到目前为止,BFD库支持大约25种处理器平台,将近50种目标文件格式。