[原]BFD obj统一库

链结器使用BFD库访问obj和achive文件. 这些库允许链结器使用同样的例程操作不同的obj文件格式. 不同的obj文件格式, 可以通过简单的建立一个BFD备份端并添加到库中即可支持. 为了保存运行时内存, 链结器和相关工具通常只支持子集. objdump -i列出配置支持文件格式.

信息丢失:
对齐信息会在a.out中丢失;
COFF段名: COFF可能包含许多段, 每个都有名字. 如果目标格式没有这么多区域, 或者区域没有名字, 链结器就不能简单的处理. 你可以通过描述期望的映射关系来规避这个问题.

BFD 标准目标文件格式:
最大的潜在的丢失信息发生在源文件格式提供了最少的交集, 在标准格式之间和目的格式之间的信息. 一个简单的描述有助于确定信息损失:
_files_
 信息存储在预处理文件中. 机器体系结构, 格式类型的特殊实现, 需要分页位, 写保护位.
_sections_
每个输入文件的区域包含区域名字, 区域在目标文件中的原始地址, 大小, 对齐, 各种标志, 指向其他BFD结构的指针.
_symbols_
每个符号包含指向目标文件的信息指针, 名字, 值, 标志. 当BFD后台读取符号表时, 重定向所有的符号, 使他们相对于所在的区域基地址. 这样作保证了每个符号指向包含其的区域. 每个符号好有一个可变的隐藏数据. 因为符号指向原始文件, 符号的私有数据类型是可访问的.

正常的全局和简单的局部符号可以在输出中维护, 因此输出文件会保持符号指向函数, 和全局静态, 通用值. 一些符号信息不值得保持. 符号中有一个字的类型信息, 因此如果格式支持符号类型信息, 在符号和类型足够简单满足一个字长, 信息将被保留.

_relocation level_
每个BFD重定位记录包含一个指向符号的指针, 数据偏移, 数据所在区域, 重定位类型描述符指针.
_line numbers_




作者:liyonghelpme 发表于2010/6/10 18:52:00 原文链接
阅读:202 评论:0 查看评论
posted @ 2010-06-10 18:52  liyonghelpme  阅读(236)  评论(0编辑  收藏  举报