ELF标头大小超过52个字节

时间:2016-06-19 10:14:09

标签: c elf

根据链接elf-format中给定的Elf32_Ehdr结构(第9页),elf头大小应为52字节并固定。但是还有字段e_ehsize,可以大于52个字节。在哪里定义那些额外的字节,直到第一节标题开始?

2 个答案:

答案 0 :(得分:2)

正如它所说,也在第9页:

  

某些目标文件控制结构可能会增长,因为ELF标头包含它们的实际大小。 如果目标文件格式更改,程序可能会遇到大于或小于预期的控制结构。因此,程序可能会忽略“额外”信息。 “缺失”信息的处理取决于上下文,并且将指定何时以及是否定义扩展

(重点补充)。目前,没有任何内容定义任何额外字节的语义;他们将包括一个扩展。此外,文本暗示如果您发现Elf32_Ehdr部分长度超过52个字节的文件,您可以安全地忽略额外的字节。

答案 1 :(得分:1)

请注意,ELF标头通常在32位机器上为52字节,在64位机器上为64字节。 旧规范[1]在其描述中不包括64位头。这可能是您一直使用的规范。 [1] http://www.skyfree.org/linux/references/ELF_Format.pdf

您可以检查访问文档的64位ELF标头[2]。 [2] ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/elf64-2.4.pdf

32位和64位ELF标头之间的区别在于:

 typedef struct{
      ........                 //            struct Elf32_Ehdr
    Elf64_Addr      e_entry;   //[8 bytes]  Elf32_Addr [4 bytes]
    Elf64_Off       e_phoff;   //[8 bytes]  Elf32_Off  [4 bytes]
    Elf64_Off       e_shoff;   //[8 bytes]  Elf32_Off  [4 bytes]
      .......
} Elf64_Ehdr;

因此,32到64位ELF标题的大小差异是(4 * 3)= 12字节。另请注意,标头可能在末尾包含额外的位,如规范所示 解析ELF二进制文件时,请确保先读取前16个字节,以确定该文件是32位还是64位小精灵。