ELF文件格式
ELF文件类型
1.可执行文件(Executable File)[.exec]:经过链接的、可执行的目标文件,通常也称为程序。
2.可重定位文件(Relocatable File)(可重定位目标文件)[.rel]:由源代码编译生成,包含编译后的二进制代码和数据,但未完成链接过程,通常以”.o”作为扩展名。
3.共享目标文件(Shared Object file)[.dyn]:动态链接库文件。可被多个程序共享使用,在运行时加载到内存。
ELF 文件结构
ELF 文件通过特定的格式组织数据,主要结构包括:
1. ELF 文件头(ELF Header)
- 位于文件起始位置,描述文件的基本属性。
- 关键字段:
- EI_MAGIC:文件魔数(如
0x7F ELF),用于标识 ELF 格式。[7f 45 4c 46即字符串“\177ELF“] - EI_CLASS:位数(32 位或 64 位)。
- EI_DATA:字节序(大端或小端)。
- e_type:文件类型(可执行文件、共享库等)。
- e_entry:程序入口地址。
- EI_MAGIC:文件魔数(如
2. 程序头表/段表(Program Header Table)
- 描述文件在内存中的布局,用于加载器将文件映射到内存。
- 关键字段:
- p_type:段类型(如代码段、数据段、动态链接段)。
- p_vaddr:内存虚拟地址。
- p_filesz:文件中占用的大小。
- p_memsz:内存中占用的大小。
3. 节头表(Section Header Table)
- 描述文件中的各个 “节”(Section),用于链接器处理目标文件。
- 常见节类型:
- .text:可执行代码段。
- .data:已初始化的全局变量和静态变量。
- .bss:未初始化的全局变量和静态变量(运行时自动初始化为 0)。
- .rodata:只读数据段(如字符串常量)。
- .symtab:符号表,记录函数和变量的名称、地址等。
- .strtab:字符串表,存储符号表中的字符串内容。
4. 节(Sections)
- 具体存储代码、数据、元信息的区域,不同类型的 ELF 文件包含的节不同。
- 示例:
- 可执行文件:包含
.text、.data、.dynamic(动态链接信息)等。 - 目标文件:包含
.text、.rel.text(代码重定位信息)等。
- 可执行文件:包含


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Rhea's Blog!
评论
