ELF文件格式

本文详细介绍了ELF文件的静态结构,包括elf文件分类、文件头和节。接着讨论了ELF文件的装载与动态链接,涉及程序头、段、动态链接和全局偏移量表等内容。通过实例总结了重定位文件和共享库文件的特征。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

64位操作系统下,readelf工具查看,hexedit查看二进制文件。

                                                                                    ELF的静态结构

1.elf文件分类

(1)可执行文件

(2)可重定位文件  .o

(3)共享库文件   .so

2.elf文件头

                                                                                                                           ELF文件头   数据结构(64字节)

struct_name e_ident e_type     e_machine e_version   e_entry   e_phoff      e_shoff   e_flags e_ehsize    e_phentsize  e_phunm    e_shentsize e_shnum e_shstrndx
字节数 16字节 2字节 2字节 4字节 8字节 8字节 8字节 4字节 2字节 2字节 2字节 2字节 2字节 2字节
含义 魔术字 文件类型 版本号 入口地址 程序头表偏移 节头表偏移 标志位 elf文件头大小 程序头表项大小 程序头表项数量 节头表项大小 节头表项数量 节名字表项数量
主要取值

0   未知

1  重定位

2  可执行

3  共享库

0 非法版本

1 当前版本

   0    

                                                                                                                            魔术字  数据结构(16字节)

文件标识 文件类型 编码格式 版本 补齐
4字节 1字节 1字节 1字节 9字节
7f 45 4c 46

0  非法

1  32位

2  64位

0 非法

1 小头端

2 大头端

1 0

3.节(section)

         ELF文件包含很多节,每个节含有一个节头。节的基本信息(节头)保存在节头表中,一个节头表项描绘一个节头。

                                                                                                                                节头表项(节头)  数据结构(64字节)

struct_name
sh_name
sh_type                                 
 sh_flags                  
sh_addr  
sh_offset
sh_size   
sh_link
sh_info
sh_addralign
sh_entsize
字节数 4字节 4字节 8字节 8字节 8字节 8字节 4字节 4字节 8字节 8字节
含义 节名索引 节的类型 标志位(属性) 映射地址 本节偏移 本节大小 地址对齐 表项大小
主要取值

0    SHT_NULL                    

1    SHT_PROGBITS

2    SHT_SYMTAB

3    SHT_STRTAB

4    SHT_RELA

5    SHT_HASH

6    SHT_DYNAMIC

7    SHT_NOTE

8   SHT_NOBITS

9   SHT_REL

10 SHT_SHLIB

11 SHT_DYNSYM       

1 SHF_WRITE

在运行过程中可写

2 SHF_ALLOC

运行过程占用内存

4 SHF_EXECINSTR

内容为指令代码

即该节映射地址能被其整除。 仅当该节为表时有效,其他为0。

                                                                                                                                            主要节类型

NULL
此值表明本节头是一个无效的节头 。     
PROGBITS
此值表明本节所含有的信息是由程序定义的。
SYMTAB
完整的符号表。
STRTAB
此值表明本节是字符串表。
RELA
此值表明本节是一个重定位节。
HASH
此值表明本节包含一张哈希表。
DYNAMIC
此值表明本节包含的是动态连接信息。
NOTE
此值表明本节包含的信息用于以某种方式来标记本文件。
NOBITS
此值表明这一节的内容是空的,并不占用实际的空间。
REL
此值表明本节是一个重定位节。
SHLIB
此值是一个保留值。
DYNSYM 一个较小的符号表,专门用于动态连接。

                                                                                                                                   特殊节(常见节)

名字 类型 标志位 说明
.bss
NOBITS
WA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值