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加文件头地址可以定位到该节区的头地址

资源表结构

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

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

ELF格式文件(非常详细)相关推荐

  1. Python:pmml格式文件的简介、安装、使用方法(利用python将机器学习模型转为Java常用的pmml格式文件)之详细攻略

    Python:pmml格式文件的简介.安装.使用方法(利用python将机器学习模型转为Java常用的pmml格式文件)之详细攻略 目录 pmml格式文件的简介 1.PMML结构 pmml安装 pmm ...

  2. linux elf格式文件详细分析

    ELF(Executable and Linkable Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西.以及都以什么样的格式去放这些东西. ...

  3. ELF格式文件详细分析

    ELF(Executable and Linkable Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西.以及都以什么样的格式去放这些东西. ...

  4. linux中elf文件的作用,Linux中ELF格式文件介绍

    一. ELF简介 ELF(Executable and Linkable Format)即可执行连接文件格式,是一种比较复杂的文件格式,但其应用广泛.与linux下的其他可执行文件(a.out,cof ...

  5. 【开发工具】【readelf】查看ELF格式文件工具(readelf)的使用

    目录 readelf概述 readelf命令使用说明 readelf概述 readelf是Linux下的分析ELF文件的命令,这个命令在分析ELF文件格式时非常有用.常见的文件如在Linux上的可执行 ...

  6. 一步步编写操作系统 47 elf格式文件分析实验

    在上一节中,我们讲述了elf格式的部分理论知识,为什么是部分呢?因为我们本着"够用"的原则,只把我们需要了解的部分说完啦.不过,我相信大部分同学仅仅凭上一节中的理论知识还是领悟不到 ...

  7. Hex、bin、axf、elf格式文件小结

    一.HEX Hex文件,一般是指Intel标准的十六进制文件.Intelhex 文件常用来保存单片机或其他处理器的目标程序代码.它保存物理程序存储区中的目标代码映象.一般编程器均支持生成此种格式文件. ...

  8. 关于ELF格式文件里面的调试信息解读

    调试信息格式一般有几种:debug信息格式有stabs,coff,xcoff,dwarf.各自在业界不同的调试器下面用,gdb只是调试器中的一个罢了. 常用的有两种格式,stab和dwarf,stab ...

  9. ELF格式文件特点的简单说明

    ELF:可执行连接文件格式. ELF文件优点: 1. 支持不同平台上的交叉编译和交叉链接,可移植性性强(与Linux下其他可执行文件(a.out,cof)相比) 2. 在执行时支持动态链接共享库 EL ...

最新文章

  1. Kosaraju 算法检测有向图的强连通性
  2. R3抹掉加载的DLL
  3. Android:按键响应方式第一种onClick属性,第二种方法接口类,第三种方式匿名内部类,第四种方式Activity
  4. Python函数及相关知识
  5. OAuth2.0授权码认证流程介绍
  6. HoloLens开发手记-配置开发环境 Install the tools
  7. 使用SpringBoot AOP 记录操作日志、异常日志
  8. bootstrap validator 提供了哪些验证函数
  9. ODPS2.0重装上阵,优化提升SQL语言表达能力
  10. centos php redhat,RHEL / CentOS 安装 OPcache 提升 PHP 效能
  11. 专访|从程序员到架构师:交流和分享最能让技术人进步
  12. MIUI android 的压缩包,【玩机组分享】Android MIUI主题结构及其制作方法
  13. 判断客户端是手机端还是PC端
  14. ADASIS_v2:根据车辆位置和数字地图描述车辆前方的道路几何及其相关属性(use)
  15. MySQL学习笔记(12)—— SQL触发器:
  16. 4k hidpi 黑苹果_黑苹果 篇四:开启mac下的2k hidpi选项,同时开启144hz
  17. 中国五大城市PM2.5数据分析
  18. C语言实现FTP客户端(已编译,亲试可用~)
  19. 数据挖掘面试 150 道题(附答案)
  20. 学tlc和JAVA,#Java学习之路——第一部分总结

热门文章

  1. 构建在知识中台基础上的企业画像
  2. LDA线性判别分析——投影的疑问解答
  3. DevOps死了吗?平台工程能否取代DevOps?
  4. CSS基础(三)---文本类型
  5. 3天学会Jenkins_1_Jenkin与CI(Continuous Integration,持续集成)?
  6. 2021csgo国内靠谱正规的开箱网站大全
  7. 158:vue+openlayers 地图上Echarts模拟飞机循环飞行
  8. java框架 token_Java安全框架(三):JWT(Json Web Token)
  9. 我们都能完整的对出魔方的所有面了
  10. 前端开发:Html5和CSS3