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加文件头地址可以定位到该节区的头地址
资源表结构
资源表用于装将物理地址转换成虚拟地址的一系列地址表
未完待续,如果有朋友刷到这篇文章有疑问欢迎留言交流
ELF格式文件(非常详细)相关推荐
- Python:pmml格式文件的简介、安装、使用方法(利用python将机器学习模型转为Java常用的pmml格式文件)之详细攻略
Python:pmml格式文件的简介.安装.使用方法(利用python将机器学习模型转为Java常用的pmml格式文件)之详细攻略 目录 pmml格式文件的简介 1.PMML结构 pmml安装 pmm ...
- linux elf格式文件详细分析
ELF(Executable and Linkable Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西.以及都以什么样的格式去放这些东西. ...
- ELF格式文件详细分析
ELF(Executable and Linkable Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西.以及都以什么样的格式去放这些东西. ...
- linux中elf文件的作用,Linux中ELF格式文件介绍
一. ELF简介 ELF(Executable and Linkable Format)即可执行连接文件格式,是一种比较复杂的文件格式,但其应用广泛.与linux下的其他可执行文件(a.out,cof ...
- 【开发工具】【readelf】查看ELF格式文件工具(readelf)的使用
目录 readelf概述 readelf命令使用说明 readelf概述 readelf是Linux下的分析ELF文件的命令,这个命令在分析ELF文件格式时非常有用.常见的文件如在Linux上的可执行 ...
- 一步步编写操作系统 47 elf格式文件分析实验
在上一节中,我们讲述了elf格式的部分理论知识,为什么是部分呢?因为我们本着"够用"的原则,只把我们需要了解的部分说完啦.不过,我相信大部分同学仅仅凭上一节中的理论知识还是领悟不到 ...
- Hex、bin、axf、elf格式文件小结
一.HEX Hex文件,一般是指Intel标准的十六进制文件.Intelhex 文件常用来保存单片机或其他处理器的目标程序代码.它保存物理程序存储区中的目标代码映象.一般编程器均支持生成此种格式文件. ...
- 关于ELF格式文件里面的调试信息解读
调试信息格式一般有几种:debug信息格式有stabs,coff,xcoff,dwarf.各自在业界不同的调试器下面用,gdb只是调试器中的一个罢了. 常用的有两种格式,stab和dwarf,stab ...
- ELF格式文件特点的简单说明
ELF:可执行连接文件格式. ELF文件优点: 1. 支持不同平台上的交叉编译和交叉链接,可移植性性强(与Linux下其他可执行文件(a.out,cof)相比) 2. 在执行时支持动态链接共享库 EL ...
最新文章
- Kosaraju 算法检测有向图的强连通性
- R3抹掉加载的DLL
- Android:按键响应方式第一种onClick属性,第二种方法接口类,第三种方式匿名内部类,第四种方式Activity
- Python函数及相关知识
- OAuth2.0授权码认证流程介绍
- HoloLens开发手记-配置开发环境 Install the tools
- 使用SpringBoot AOP 记录操作日志、异常日志
- bootstrap validator 提供了哪些验证函数
- ODPS2.0重装上阵,优化提升SQL语言表达能力
- centos php redhat,RHEL / CentOS 安装 OPcache 提升 PHP 效能
- 专访|从程序员到架构师:交流和分享最能让技术人进步
- MIUI android 的压缩包,【玩机组分享】Android MIUI主题结构及其制作方法
- 判断客户端是手机端还是PC端
- ADASIS_v2:根据车辆位置和数字地图描述车辆前方的道路几何及其相关属性(use)
- MySQL学习笔记(12)—— SQL触发器:
- 4k hidpi 黑苹果_黑苹果 篇四:开启mac下的2k hidpi选项,同时开启144hz
- 中国五大城市PM2.5数据分析
- C语言实现FTP客户端(已编译,亲试可用~)
- 数据挖掘面试 150 道题(附答案)
- 学tlc和JAVA,#Java学习之路——第一部分总结
热门文章
- 构建在知识中台基础上的企业画像
- LDA线性判别分析——投影的疑问解答
- DevOps死了吗?平台工程能否取代DevOps?
- CSS基础(三)---文本类型
- 3天学会Jenkins_1_Jenkin与CI(Continuous Integration,持续集成)?
- 2021csgo国内靠谱正规的开箱网站大全
- 158:vue+openlayers 地图上Echarts模拟飞机循环飞行
- java框架 token_Java安全框架(三):JWT(Json Web Token)
- 我们都能完整的对出魔方的所有面了
- 前端开发:Html5和CSS3