本文内容参考:
链接装载与库:第三章——ELF文件结构-CSDN博客
(全网最细)ELF文件详解-CSDN博客
ELF(Executable and Linking Format)文件结构描述_elf结构-CSDN博客
ELF文件介绍-CSDN博客
ELF文件概述_elf文件怎么打开-CSDN博客
特此致谢!
一、总体介绍
1. ELF是什么
ELF的全称是Executeable and Linking Format,中文译为可执行可链接格式。在计算机科学中,ELF是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件的文件格式。也是用在Linux系统下的一种目标文件(object file)存储格式。
ELF是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI)而开发和发布的,也是Linux的主要可执行文件格式。
Linux下符合ELF格式的文件主要有四种:可重定向(定位)文件(目标文件)、可执行文件、共享目标文件、核心转储文件。
- 可重定向文件(relocatable file)
也常叫目标文件。包含二进制代码和数据,其可以在编译时与其它可重定向目标文件合并起来,创建一个可执行文件。
可重定向文件里面包含了代码和数据,用于和其它可重定向文件一起链接形成一个可执行文件或者动态库。符号为ET_REL。
就是gcc加-c参数而生成的只编译不链接文件。后期还需要ld来完成重定位过程。平时很少直接用到。
- 可执行文件(executable file)
包含二进制代码和数据,其形式可以被直接拷贝到存储器并执行。
可执行文件里面包含了可以运行的程序代码。符号为ET_EXEC。
- 动态库文件(shared object file)
一种特殊类型的可重定位目标文件,可以在加载或者运行时被动态地加载到存储器并链接。
动态库文件里面也包含了可用于链接的代码和程序。符号为ET_DYN。
它用于两个过程,首先链接器把它和其它可重定向文件、动态库一起链接形成一个可执行文件。然后程序运行时,动态链接器负责在需要时动态加载动态库文件。
- 核心转储文件(core dump file)
当进程意外终止时,系统可以将该进程的地址空间的内容及终止时的一些其它信息转储到核心转储文件。
2. 历史
1999年,ELF被86open项目选为x86架构上的类Unix操作系统的二进制文件标准格式,用来取代COFF。因其可扩展性与灵活性,也可应用在其它处理器、计算机系统架构的操作系统上。
3. 组成部分
ELF文件由4部分组成,分别是ELF头(ELF header)、程序头表(Program header table)、节(Section)和节头表(Section header table)。实际上,一个文件中不一定包含全部内容,只有ELF头的位置是固定的,其余各部分的位置、大小等信息由ELF头中的各项值来决定。
更多内容请看下回。