- BFD:https://ftp.gnu.org/old-gnu/Manuals/bfd-2.9.1/html_mono/bfd.html
- DEMOs:https://github.com/Rtoax/test/tree/master/c/glibc/bfd
- 断点示例:https://github.com/Rtoax/test/tree/master/gdb/breakpoint
First Edition--BFD version < 3.0
April 1991
{Steve Chamberlain}
{Cygnus Support}
Table of Contents
- Introduction
- BFD front end
typedef bfd
- Error reporting
- Symbols
- Memory usage
- Initialization
- Sections
- Symbols
- Archives
- File formats
- Relocations
- The howto manager
- Core files
- Targets
- Architectures
- Opening and closing BFDs
- Internal functions
- File caching
- Linker Functions
- Hash Tables
- BFD back ends
- Index
介绍
BFD是一个软件包,允许应用程序使用相同的例程对目标文件进行操作,无论目标文件格式如何。只需创建新的BFD后端并将其添加到库中,即可支持新的目标文件格式。
BFD分为两部分:前端和后端(每种目标文件格式一个)。
- BFD的前端为用户提供接口。它管理内存和各种规范的数据结构。前端还决定使用哪个后端以及何时调用后端例程。
- 后端为BFD提供了对现实世界的看法。每个后端提供一组呼叫,BFD前端可以使用这些呼叫来维护其规范形式。后端也可以保留信息以供自己使用,以提高效率。
历史
BFD背后的一个推动力是英特尔俄勒冈州GNU 960团队希望在COFF和b.out文件格式上实现应用程序的互操作性。Cygnus为团队提供了GNU支持,并与之签约以提供所需的功能。
这个名字来自大卫·华莱士(David Wallace)与理查德·斯托曼(Richard Stallman)关于图书馆的对话:RMS表示这将非常困难-大卫说“ BFD”。斯托曼是正确的,但名字卡住了。
同时,Ready Systems希望获得几乎相同的东西,但是针对不同的目标文件格式:IEEE-695,Oasys,Srecords,a.out和68k coff。
BFD首先由Cygnus支持成员实施;史蒂夫·张伯伦(sac@cygnus.com
),约翰·吉尔摩(gnu@cygnus.com
),肯尼·理查德·皮克斯利(K.理查德·皮克斯利rich@cygnus.com
)和大卫·汉高·华莱士(David Henkel-Wallace gumby@cygnus.com
)。
如何使用BFD
要使用该库,请包含“ bfd.h”并与“ libbfd.a”链接。
BFD为调用应用程序提供了对象文件各部分的通用接口。
当应用程序成功打开目标文件(对象,归档文件或其他文件)时,将返回指向内部结构的指针。该指针指向一个名为的结构bfd
,在bfd.h中进行了描述 。我们的惯例是将此指针称为BFD,并将其实例称为code abfd
。目标对象文件上的所有操作均作为方法应用于BFD。映射是bfd.h
在一组宏中定义的,所有宏均以`bfd_' 减少名称空间污染。