ELF文件格式
Posted tongyishu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ELF文件格式相关的知识,希望对你有一定的参考价值。
ELF概述
- ELF(Executable and Linking Format),可执行可连接格式,具有这种格式的文件称为 ELF 文件。
目标文件有三种类型:
- 可重定位文件(Relocatable File) 包含适合于与其他目标文件链接来创建可执行文件或者共享目标文件的代码和数据。
- 可执行文件(Executable File) 包含适合于执行的一个程序,此文件规定了exec() 如何创建一个程序的进程映像。
- 共享目标文件(Shared Object File) 包含可在两种上下文中链接的代码和数据。首先链接编辑器可以将它和其它可重定位文件和共享目标文件一起处理, 生成另外一个目标文件。其次,动态链接器(Dynamic Linker)可能将它与某个可执行文件以及其它共享目标一起组合,创建进程映像。
- 目标文件全部是程序的二进制表示,目的是直接在某种处理器上直接执行。
目标文件格式:
- (ELF Header)用来描述整个文件的组织。节区部分包含链接视图的大量信息:指令、数据、符号表、重定位信息等等。
- (Program Header Table)如果存在的话是告诉系统如何创建进程映像。用来构造进程映像的目标文件必须具有程序头部表,可重定位文件不需要这个表。
- (Section Header Table)包含了描述文件节区的信息,每个节区在表中都有一项,每一项给出诸如节区名称、节区大小这类信息。用于链接的目标文件必须包含节区头部表,其他目标文件可以有,也可以没有这个表。
ELF Header部分
- ELF Header 数据结构
- ELF Header 中各个字段的含义
节区(Sections)
- 节区中包含目标文件中的所有信息,除了:ELF 头部、程序头部表格、节区头部 表格。节区满足以下条件:
(1). 目标文件中的每个节区都有对应的节区头部描述它,反过来,有节区头部不意 味着有节区。
(2). 每个节区占用文件中一个连续字节区域(这个区域可能长度为 0)。
(3). 文件中的节区不能重叠,不允许一个字节存在于两个节区中的情况发生。
(4). 目标文件中可能包含非活动空间(INACTIVE SPACE)。这些区域不属于任何 头部和节区,其内容未指定。
- 特殊节区
- 注意事项:
n 以“.”开头的节区名称是系统保留的。应用程序可以使用没有前缀的节区名称,以避免与系统节区冲突。
n 目标文件格式允许人们定义不在上述列表中的节区。
n 目标文件中也可以包含多个名字相同的节区。
以上是关于ELF文件格式的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向ELF 文件格式 ( ELF 文件简介 | ELF 文件结构 )