孩子牙疼怎么办ELF格式⽂件(⾮常详细)
ELF⽂件研究
在计算机中,ELF⽂件是⼀种主要⽤于⼆进制,可执⾏⽂件,⽬标代码格式的⽂件,
ELF⽂件主要由四个部分组成 1.ELF头(ELF header),2.程序头表(Program header),3.节(Section),4节头表(Section header table)。
ELF⽂件头
#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;
e_ident作为开头主要⽤装⼀些标⽰信息,固定值来判断ELF⽂件的合法性,其开头4个字节固定为0x7f, ELF三个字符。
e_type是⽤来标志⽂件类型的⽐如有1.可重定位⽂件,2.可执⾏⽂件,3.共享⽬标⽂件。
e_machine来⽤标志运⾏⽂件的机器类型,
e_version表⽰⽂件的版本
e_entry 程序的⼊⼝的虚拟地址,作为执⾏⽂件可以作为执⾏向量地址
e_phoff 表⽰程序表头相对于⽂件头的偏移量
e_shoff 表⽰节头表相对于⽂件头的编移量
作文青春e_flags 与⽂件相关的,特定处理器的标志
e_ehsize 表⽰ELF头部的⼤⼩(单位字节)
e_phentsize 表⽰每个程序头表条⽬⼤⼩(单位字节)
e_phnum 表⽰有多少个程序头条⽬
e_shentsize 表⽰每个节头表的条⽬⼤⼩
e_shnum 表⽰有多少个节头表条⽬
e_shstrndx 包含节名称的字符串,作为⼀个符号表
e_phoff 的作⽤
e_phoff加上⽂件的头地址就可以定位到程序头表的位置
句加鸟念什么
e_shoff的作⽤
e_shoff加上⽂件的头地址就可以定位到节头表的位置
程序头表(Program header)
程序头表⽤来描述⼀个段在⽂件的位置,⼤⼩以及它被放进内存后所在的位置和⼤⼩
typedef struct {
Elf32_Wordp _type;
Elf32_Off p_offt;
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;
p_type 表⽰程序头描述的段类型
p_offt 表⽰段的第⼀字节相对⽂件头的偏移
p_vaddr 物理地址
仍旧的近义词
p_filesz 段在⽂件中的长度
p_memsz 段在内存中的长度
p_flags 与段相关的标志
p_align 根据此项值来确定段在⽂件及内存中如何对齐
p_offt 的作⽤
p_offt加⽂件头地址可以定位到该段的头地址
节头表
节表头包含⽂件中各个节的条⽬,每个节的条⽬定义了该节的类型,定义了节的⼤⼩,以及在⼆进制⽂件内部的编译
typedef struct{
Elf32_Word sh_name;
Elf32_Word sh_type;
Elf32_Word sh_flags;
Elf32_Addr sh_addr;
Elf32_Off sh_offt;
Elf32_Word sh_size;
Elf32_Word sh_link;
Elf32_Word sh_info;
Elf32_Word sh_addralign;
Elf32_Word sh_entsize;
}Elf32_Shdr;
清朝爵位等级排列
sh_name表⽰节区名称
描写小动物sh_type表⽰节区类型
sh_flags表⽰节的类型是否是可执⾏节,内容是否可以修改
sh_addr表⽰节区在第⼀个字节应处的位置
sh_offt表⽰节区第⼀个字节相对⽂件头的偏移
sh_size表⽰节区的⼤⼩(单位字节)
sh_link表⽰节区头部表索引链接
sh_info表⽰节区的附加信息
sh_addralign⽤于地址对齐
sh_entsize表⽰符号表相关
sh_offt的作⽤
sh_offt加⽂件头地址可以定位到该节区的头地址
为什么过年
资源表结构
唱双簧
资源表⽤于装将物理地址转换成虚拟地址的⼀系列地址表
未完待续,如果有朋友刷到这篇⽂章有疑问欢迎留⾔交流