ELF
ELF ELF (Executable and Linkable Format)是一种为可执行文件,目标文件,共享链接库和内核转储(core dumps)准备的标准文件格式。 Linux和很多类Unix操作系统都使用这个格式。 目前常见的Linux、 Android可执行文件、共享库 (.so)、目标文件 ( .o)以及Core 文件 (吐核)均为此格式。 64位ELF文件格式的结构 一个ELF文件由以下三部分组成: ELF头(ELF header) - 描述文件的主要特性:类型,CPU架构,入口地址,现有部分的大小和偏移等等; 程序头表(Program header table) - 列举了所有有效的段(segments)和他们的属性。 程序头表需要加载器将文件中的节加载到虚拟内存段中; 节头表(Section header table) - 包含对节(sections)的描述。 ELF头(ELF header) ELF头(ELF header)位于文件的开始位置。 它的主要目的是定位文件的其他部分。 文件头主要包含以下字段: ELF文件鉴定 - 一个字节数组用来确认文件是否是一个ELF文件,并且提供普通文件特征的信息; 文件类型 - 确定文件类型。 这个字段描述文件是一个重定位文件,或可执行文件,或…; 目标结构; ELF文件格式的版本; 程序入口地址; 程序头表的文件偏移; 节头表的文件偏移; ELF头(ELF header)的大小; 程序头表的表项大小; 其他字段… 节(sections) 所有的数据都存储在ELF文件的节(sections)中。 我们通过节头表中的索引(index)来确认节(sections)。 节头表表项包含以下字段: 节的名字; 节的类型; 节的属性; 内存地址; 文件中的偏移; 节的大小; 到其他节的链接; 各种各样的信息; 地址对齐; 这个表项的大小,如果有的话; 程序头表(Program header table) ...