ELF(Executable and Linkable Format)文件结构

来源:互联网 发布:ce怎么修改游戏数据 编辑:程序博客网 时间:2024/06/05 00:27


从Linking View可以看出,ELF文件由4部分组成:ELF header(ELF头), 程序头表(Program header table), 节(Sections)和节头表(Section header table)。实际上,一个文件中不一定包含全部这些内容,而且它们的位置也未必这样安排。只有ELF头的位置是固定的,其余各部分的位置、大小等信息由ELF头中的各项值来决定。

ELF header的格式如图:

#define EI_NIDENT       16 typedef struct {        unsigned char   e_ident[EI_NIDENT];         Elf32_Half      e_type;        Elf32_Half      e_machine;        Elf32_Word      e_version;        Elf32_Addr      e_entry;        Elf32_Off       e_phoff;        Elf32_Off       e_shoff;        Elf32_Word      e_flags;        Elf32_Half      e_ehsize;        Elf32_Half      e_phentsize;        Elf32_Half      e_phnum;        Elf32_Half      e_shentsize;        Elf32_Half      e_shnum;        Elf32_Half      e_shstrndx;} Elf32_Ehdr;typedef struct {        unsigned char   e_ident[EI_NIDENT];         Elf64_Half      e_type;        Elf64_Half      e_machine;        Elf64_Word      e_version;        Elf64_Addr      e_entry;        Elf64_Off       e_phoff;        Elf64_Off       e_shoff;        Elf64_Word      e_flags;        Elf64_Half      e_ehsize;        Elf64_Half      e_phentsize;        Elf64_Half      e_phnum;        Elf64_Half      e_shentsize;        Elf64_Half      e_shnum;        Elf64_Half      e_shstrndx;} Elf64_Ehdr;


这里我拿了一个32位的elf文件。用Winhex打开,如图,这就是ELF header。




这里指的34是e_phoff成员——Program header table 在文件中的偏移量。同理,我们可以得到e_shnum(Program header table中的条目) = 3

我们看到,Program header table在文件中的偏移量位0x34,而ELFheader大小也是0x34,可见ELF header后面紧接着就是Program header table。




Program header的数据结构:

typedef struct {              Elf32_Word p_type;              Elf32_Off  p_offset;  5           Elf32_Addr p_vaddr;              Elf32_Addr p_paddr;              Elf32_Word p_filesz;              Elf32_Word p_memsz;              Elf32_Word p_flags; 10           Elf32_Word p_align;    }

这些相关成员可以在碰到的时候再研究,总之Program header描述的是一个段在文件中的位置、大小以及它被放进内存后所在的位置和大小。



0 0
原创粉丝点击