- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
elf文件格式
文件格式
Executable and Linking Format (ELF)
整体结构
ELF对象格式用于目标文件(.o扩展名)和执行文件. 有些信息只出现在目标文件或执行文件中.
ELF文件由下列部件构成. ELF header必须放在文件的开始;其他部件可以随便排放(ELF header给出了其他部件的偏移量).
ELF文件构件:
Section
描述
ELF header
一般信息.
Program header table
执行文件信息;只出现在执行文件中.
Section data
Section的实际数据;一些section有特殊的含义,
例如: symbol table和string table.
Section headers
不同ELF section信息; 每个section一个.
典型ELF文件结构:
ELF Header
Program Header Table
Section 1 Data
……
Section n Data
Section Header Table
ELF头[ELF Header]
ELF头包含目标文件的一般信息;具有如下结构(from elf.h):
#define EI_NIDENT 16
typedef struct {
unsigned char e_ident[EI_NIDENT];
Elf32_Half e_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;
};
ELF头域描述:
域
描述
e_ident
16字节串: 4字节标识: _ELF
1字节class: 32位对象-1
1字节数据编码: litte-endian-1,big-endian-2
1字节版本: 当前版本-1
9字节零填充
e_type
文件类型: 可重定位-1,可执行-2
e_machine
目标体系结构: MC68000ColdFire-4
e_version
目标文件版本: 设定为1.
e_entry
程序入口地址.
e_phoff
Program Header Table的文件偏移.
e_shoff
Section Header Table的文件偏移.
e_flags
未使用.
e_ehsize
ELF头大小.
e_phentsize
Program Header Table中每条目的大小.
e_phnum
Program Header Table中条目个数.
e_shentsize
Section Header Table中每条目的大小.
e_shnum
Section Header Table中条目个数.
e_shstrndx
包含Section名串表的条目的Section Header索引.
程序头[Program Header]
程序头为一结构数组,每个元素描述执行文件的一个可载入段.
元素结构如下(from elf.h):
typedef struct {
Elf32_Word p_type;
Elf32_Off p_offset;
Elf32_Addr p_vaddr;
Elf32_Addr p_paddr;
Elf32_Word p_filesz;
Elf32_Word p_memsz;
Elf32_Word p_flags;
Elf32_Word p_align;
} Elf32_Phdr;
ELF程序头域描述:
域
描述
p_type
段类型;linker只使用PT_LOAD(1).
p_offset
段raw数据的文件偏移.
p_vaddr
载入时段在内存中的驻留地址.
p_paddr
未使用.
p_filesz
段在文件中的大小;可以为0.
p_memsz
段在内存中的大小;可以为0.
p_flags
包含如下标志组合的Bit mask:
PF_X (1) Execute
PF_W (2) Write
PF_R (4) Read
p_align
段在内存文件中的对齐方式.
Section Headers
ELF文件中的每个section的都有激励[incitation]头; Section个数由ELF Header中的e_shnum 域指明
文档评论(0)