大家好,欢迎来到IT知识分享网。
elf文件解析
1、ELF文件结构格式:
ELF Header |
---|
.text |
.data |
.bss |
… |
section header table |
string tables |
symbol tables |
… |
elf文件头包含了整个文件的基本属性,如文件版本,入口地址等,接着就是ELF文件的各个段
2、ELF头文件解析:
linux定义了自己的一套变量体系,如下
自定义类型 | 描述 | 长度(字节) |
---|---|---|
Elf32_Addr | 32位版本程序地址 | 4 |
Elf32_Half | 32位版本的无符号短整形 | 2 |
Elf32_Off | 32位版本的偏移地址 | 4 |
Elf32_Sword | 32位版本有符号整形 | 4 |
Elf32_Word | 32位版本无符号整形 | 4 |
Elf64_Addr | 64位版本程序地址 | 8 |
Elf64_Half | 64位版本的无符号短整形 | 2 |
Elf64_Off | 64位版本的偏移地址 | 8 |
Elf64_Sword | 64位版本有符号整形 | 4 |
Elf64_Word | 64位版本无符号整形 | 4 |
以32位版本为例,其头定义如下
typedef struct{
unsigned char e_ident[16];//前四个字节为ELF文件魔术,第五个字节为ELF文件类,0x01为32位,0x02为64位;第6位为字节序,规定为大端绪还是小端;第7位为elf文件的版本号,后9字节未定义,可作为扩展标志
Elf32_Half e_type;//ELF文件类型,1表示可重定位文件,2表示可执行文件,3表示共享文件
Elf32_Half e_machine;//ELF文件运行平台,1为AT&T WE 32100,2为SPARC,3为intel x86,4为Motorola 68000,5为Motorola 88000,6为intel 80860,
Elf32_Word e_version;//elf版本号
Elf32_Addr e_entry;//程序入口地址
Elf32_Off e_phoff;//程序表头文件偏移
Elf32_Off e_shoff;//段表在FOA中的便宜
Elf32_Word e_flags;//标志位,用来标志文件平台等
Elf32_Half e_ehsize;//ELF文件头大小
Elf32_Half e_phentisize;//程序头表大小
Elf32_Half e_phnum;//程序头表数目
Elf32_Half e_shentsize;//段表描述符大小
Elf32_Half e_shnum;//段表数量
Elf32_Half e_shstrndx;//段表字符串表所在段在段表中的下标
}Elf32_Ehdr;
我们以一个ELF文件为例,
可以看到ELF头文件信息,我们打开以16进制打开一个这个文件
第一行前4个字节为 7F 45 4C 46,这个为ELF文件的魔数,其为DEL控制符,第5个字节为01,表示此文件为32位,第6个字节01表示小端序。与解析出的头文件内容相一致。
第二行的前2个字节为0x0002(小端序),表示为此文件类型为可执行文件,第3,4字节为0x0003,表示在intel x86平台运行,第5-8字节为0x00000001,表示版本号为0x1,第9-12字节为0x080484B0,表示程序的入口地址。
第三行的前四个字节为0x00002224,表示段表在文件中的偏移。第5-8个字节为0x00000000,为平台信息,等等后面可依次解析
3、ELF段表:
成员信息如下:
由上知,elf段表的文件偏移为0x2224,找到文件偏移位置,如下
由上知第一个段表全为空,段表解析就不一一阐述,本文件的段表信息如下图
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/23260.html