在计算机科学中,是一种用于二进制文件可执行文件目标代码、共享库和核心转储格式文件。
 

ELF文件组成部分

  ELF文件由4部分组成,分别是ELF头(ELF header)、程序头表(Program header table)、节(Section)和节头表(Section header table)。实际上,一个文件中不一定包含全部内容,而且他们的位置也未必如同所示这样安排,只有ELF头的位置是固定的,其余各部分的位置、大小等信息由ELF头中的各项值来决定。
 

ELF header

格式代码如下:

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

数据类型说明:

名称 大小 对齐 用途
Elf32_Addr 4 4 无符号程序地址
Elf32_Half 2 2 无符号中等大小整数
Elf32_Off 4 4 无符号文件偏移
Elf32_Sword 4 4 有符号大整数
Elf32_Word 4 4 无符号大整数
unsigned char 1 1 无符号小整数
 

代码项含义:

最开头是16个字节的e_ident, 其中包含用以表示ELF文件的字符,以及其他一些与机器无关的信息。开头的4个字节值固定不变,为0x7f和ELF三个字符。
e_type 它标识的是该文件的类型。
e_machine 表明运行该程序需要的体系结构。
e_version 表示文件的版本。
e_entry 程序的入口地址。
e_phoff 表示Program header table 在文件中的偏移量(以字节计数)。
e_shoff 表示Section header table 在文件中的偏移量(以字节计数)。
e_flags 对IA32而言,此项为0。
e_ehsize 表示ELF header大小(以字节计数)。
e_phentsize 表示Program header table中每一个条目的大小。
e_phnum 表示Program header table中有多少个条目。
e_shentsize 表示Section header table中的每一个条目的大小。
  
e_shnum 表示Section header table中有多少个条目。
  
e_shstrndx 包含节名称的字符串是第几个节(从零开始计数)。
 

Program header

Program header描述的是一个段在文件中的位置、大小以及它被放进内存后所在的位置和大小。

格式代码如下:

typedef struct {
Elf32_Wordp_type;
Elf32_Offp_offset;
Elf32_Addr p_vaddr;
Elf32_Addr p_paddr;
Elf32_Wordp_filesz;
Elf32_Word p_memsz;
Elf32_Word p_flags;
Elf32_Word p_align;
}

代码项含义:

p_type 当前Program header所描述的段的类型。
p_offset 段的第一个字节在文件中的偏移。
p_vaddr 段的一个字节在内存中的虚拟地址
p_paddr 在物理内存定位相关的系统中,此项是为物理地址保留。
p_filesz 段在文件中的长度。
p_memsz 段在内存中的长度。
p_flags 与段相关的标志。
p_align 根据此项值来确定段在文件及内存中如何对齐。

最新文章

  1. ORM小练习代码
  2. Linux TOP命令 按内存占用排序和按CPU占用排序
  3. 关于 iOS 的一些学习资料
  4. ORA-12560: TNS: 协议适配器错误 解决
  5. ZOJ 3829 Known Notation (2014牡丹江H称号)
  6. winform利用代码将控件置于顶端底端
  7. 浏览器中显示PPT的展示效果
  8. vuejs组件库pk介绍
  9. recover database noredo时报错ORA-19573
  10. 我练就数据分析技能从HR转型为产品经理
  11. AOP 和 前置通知,后置通知
  12. 单页WEB应用(三),Chat聊天模块
  13. javascript 获取服务时间
  14. 洛谷 P2530 [SHOI2001]化工厂装箱员 解题报告
  15. 图层的使用要点(CALayer)
  16. html表格导出Excel的一点经验心得(转载)
  17. delphi弹出选择对话框选择目录|SelectDirectory 函数(转)
  18. 【云计算】OpenStack项目全面介绍
  19. jsc
  20. 【复杂度分析】loj#6043. 「雅礼集训 2017 Day7」蛐蛐国的修墙方案

热门文章

  1. 工业级wifi模块
  2. day05 Pyhton学习总结
  3. docker19.03限制容器使用的cpu资源
  4. selenium 提取天猫网页数据
  5. javascript arcgis 取区域中心点
  6. .Net Mvc学习——ASP.NET MVC中常用的ActionResult类型
  7. npm 注册淘宝镜像
  8. buuctf-misc 菜刀666
  9. 对PatchGAN的感知域(receptive_field)理解
  10. Windows2008R2+ IIS7.5+php+mysql 搭建教程