ELF文件格式分析
摘要 嵌入式操作系统应用领域广,硬件环境复杂多样,降低开发成木、缩短开发周
期、提高产品质量是工业界和学术界共同关注的问题。借鉴软件复用的思想, 采用基于构件的软件开发思路來开发I茨入式操作系统是一条可行的途径。耍包含与不同处理器体系结构相关的信息,所以ABI并不是只有一个规范,而是 一个规范体系。Svstem V ABI由两个部分组成:一个通用的部分,描述System V 所 有硬件平台上都一致的接口[3]; —个处理器相关的部分,描述特定丁•某个处理器体系 结构的具体实现[4]。
System VABI的主要参考标准包括:
■目标系统处理器的体系结构手册
System V Interface Definition (接口 定义),第 4 版
IEEE POSIX -1990标准操作系统规范
X/Ope n Com mon Application Environment Specification(CAE), Issue
International Standard, ISO/IEC 9899:1990(E), Programming Languages 一 C, 12/15/90.
X Window System™, X Version 11, Release 5,图形用户界面规范
LSB
由丁•我们所关心的主要是Linux平台上目标文件的格式,所以Linux标准LSB (Lmux Standard Base)也是重耍的参考资料。LSB的目标是增强不同的Linux发布版本之 间的兼容性,与ABI类似,也由两个部分组成:
gLSB ( Generic LSB )适用于所有体系结构
archLSB ( Architecture Specific LSB )特定某种体系结构的 LSB
日询,LSB由SomceForge开放源码项hl社区提供支持。
3 ELF文件格式
冃标文件有三种类型:
可重定位文件(Relocatable File) 包含适介丁•与其他目标文件链接來创建可 执行文件或者共亨目标文件的代码和数据。
■可执行文件(Executable File) 包含适合于执行的一个程序,此文件规定了 execO如何创建一个程序的进程映像。
共亨目标文件(Shared Object File) 包含可在网种上下文中链接的代码和数
据。首先链接编辑器可以将它和其它可雨定位文件和共亨冃标文件一起处理, 生成另夕卜—*个目标文件。其次,动态链接器(Dynamic Linker) H能将它与某 个可执行文件以及其它共享目标一起组合,创建进程映像。
冃标文件全部是程序的二进制表示,冃的是H•接在某种处理器上也接执行。
目标文件格式支持8位字节/32位体系结构。不过这种格式是可以扩展的,目标文 件因此以某些机器独立的格式表达某些控制数据,使得能够以一种公共的方式來识别和 解释其内容。冃标文件中的其它数据使用冃标处理器的编码结构,而不管文件在何种机 器上创建。
表1ELF中常用数据格式
名称
大小
对齐
■ 目的
Elf32 Addr
4
4
无符号程序地址
Elf32 Half
2
2
无符号中等整数
Elf32 Off
4
4
无符号文件偏移
Elf32 SWord
4
4
有符号大整数
Elf32 Word
4
4
无符号大整数
unsigned chai
1
1
无符号小整数
鬥标文件中的所有数据结构都遵从然”大小和对齐规则。如果必耍,数据结构町 以包含显式的补齐,例如为了确保4字节对象按4字节边界对齐。数据对齐同样适用J*
文件内部。
冃标文件既要参与程序链接乂要参与程序执行。出丁•方便性和效率考虑,冃标文件 格式提供了两种并行视图,分别反映了这些活动的不同需求。
图1忖标文件格式
链接视图 执行视图
ELF头部
ELF头部
程序头部表(可选)
程序头部表
节区1
段1
• • •
节区n
段2
• • •
• • •
• • •
节区头部表
节区头部表(可选)
文件开始处是一个ELF头部(ELF Header),用來描述幣个文件的组织。节区部 分包含链接视图的大量信息:指令、数据、符号表、巫定位信息等等。
程序头部表(Program Header Table),如果存在的话,告诉系统如何创建进程映像。 用來构造进程映像的冃标文件必须具有程序头部表,可重定位文件不需要这个表。
节区头部表(Section Heade Table)包含了描述文件节区的信息,每个节区
ELF文件格式分析 来自淘豆网m.daumloan.com转载请标明出处.