Elf32_Half e_machine;//有X86、arm之类 Elf32_Word e_version; Elf32_Addr e_entry;//可执行程序的入口地址 Elf32_Off e_phoff;//Program头表的偏移地址 Elf32_Off e_shoff;//Section头表的偏移地址 Elf32_Word e_flags; Elf32_Half e_ehsize;//本结构体的size Elf32_Half e_phentsize;//单个...
}Elf32_Ehdr; 这里简单解释一下最后一个字段e_shstrndx的含义,“e_shstrndx”是Elf32_Ehdr的最后一个成员,它是“Section header string table index”的缩写。我们知道段表字符串表本身也是ELF文件中的一个普通的段,知道它的名字往往叫做“.shstrtab”。那么这个“e_shstrndx”就表示“.shstrtab”在段表中...
Elf32_Half e_type; /* Object file type */ Elf32_Half e_machine; /* Architecture */ Elf32_Word e_version; /* Object file version */ Elf32_Addr e_entry; /* Entry point virtual address */ Elf32_Off e_phoff; /* Program header table file offset */ Elf32_Off e_shoff; /* Sect...
Elf32_Half e_type; //类型包括:可执行文件、可重定向文件、共享目标文件等 Elf32_Half e_machine; //有X86、arm之类 Elf32_Word e_version; Elf32_Addr e_entry; //可执行程序的入口地址 Elf32_Off e_phoff; //Program头表的偏移地址 Elf32_Off e_shoff; //Section头表的偏移地址 Elf32_Word e_...
}Elf32_Ehdr; 这里面包括后面的code都会涉及到elf的数据格式,在这给出: 所以打印elf的头信息可以设计为: //读取文件头函数 voidfileheader(constchar*pbuff) { printf("ELF Header:\r\n"); //Magic printf(" Magic: "); for(inti = 0;i<EI_NIDENT;++i) //e_ident[EI_NIDENT] ...
}Elf32_Ehdr; e_ident :ELF的一些标识信息,前四位为.ELF,其他的信息比如大小端等 e_machine :文件的目标体系架构,比如ARM e_version : 0为非法版本,1为当前版本 e_entry :程序入口的虚拟地址 e_phoff :程序头部表偏移地址 e_shoff :节区头部表偏移地址 ...
} ElfN_Ehdr; // N 可为32或64,上面的ElfN_Addr、ElfN_Off同理 e_ident 数组始终以 4 字节的“幻数”开头,以此标识该文件为 ELF 二进制文件。 幻数由十六进制数字 0x7f 组成,后跟字母 E、L 及 F 的 ASCII 字符代码。紧跟在幻数后面,有更多字节提供了有关 ELF 二进制文件类型规范的详细信息。在 el...
06.eh_frame_hdr 07 08.init_array.fini_array.data.rel.ro.dynamic.got Program Headers罗列了所有段的信息,含义如下表: [1]. Type 的取值与含义如下 PHDR:此类型的程序头如果存在的话,它表明的是其自身所在的程序头表在文件或内存中的位置和大小。这样的段在文件中可以不存在,只有当所在程序头表所覆盖的...
第2 行 Magic:用来指名该文件是一个 ELF 对象文件(Object File),对应于 Elf32_Ehdr 数据结构中的 unsigned char e_ident[EI_NIDENT]; ,使用以下宏值进行索引: e_ident[EI_MAG0] ~ e_ident[EI_MAG3] :包含了 ELF 文件的魔数,依次固定是 0x7f 和‘E’、‘L’、‘F’。