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_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;

p_type 表示程序头描述的段类型

p_offset 表示段的第一字节相对文件头的偏移

p_vaddr 物理地址

p_filesz  段在文件中的长度

p_memsz 段在内存中的长度

p_flags 与段相关的标志

p_align 根据此项值来确定段在文件及内存中如何对齐

p_offset 的作用

p_offset加文件头地址可以定位到该段的头地址

 

 

节头表

节表头包含文件中各个节的条目,每个节的条目定义了该节的类型,定义了节的大小,以及在二进制文件内部的编译


typedef struct{

Elf32_Word sh_name;
Elf32_Word sh_type;
Elf32_Word sh_flags;
Elf32_Addr sh_addr;
Elf32_Off sh_offset;
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_offset表示节区第一个字节相对文件头的偏移

sh_size表示节区的大小(单位字节)

sh_link表示节区头部表索引链接

sh_info表示节区的附加信息

sh_addralign用于地址对齐

sh_entsize表示符号表相关

sh_offset的作用

sh_offset加文件头地址可以定位到该节区的头地址

资源表结构

资源表用于装将物理地址转换成虚拟地址的一系列地址表

 

未完待续,如果有朋友刷到这篇文章有疑问欢迎留言交流

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值