ELF Object files 参与程序的链接和执行,从这两个角度分别有两种视图:
ELF header 位于文件的最开始处,描述整个文件的组织结构。
Program Header Table 告诉系统如何创建进程镜像,在执行程序时必须存在,在 relocatable files 中则不需要。每个 program header 分别描述一个 segment,包括 segment 在文件和内存中的大小及地址等等。
执行视图中的 segment 其实是由很多个 section 组成。在一个进程镜像中通常具有 text segment 和 data segment 等等。
section 中可以包含数据或代码,典型的 section 包括.data(存放初始化过的全局变量)、.text(包含程序指令代码)、.rodata(包含程序中的只读数据)、.symtab(存放符号表)等等。
每个 section 都需在 section header table 中有一个对应的项,描述 section 的名字、大小、类型和属性等等。
在 ELF Object files 中,只有 ELF header 的位置固定,sections 和 segments 的位置都不固定。在解析时,通过 ELF header 的相应成员可以定位到他们的位置。
下面是在描述 ELF Object files 文件格式时经常使用的数据类型: