ELF(Executable and Linkable Format)可执行和可链接格式是一种对象文件格式,分为三种类型:
a.可重定位目标文件:包含了适合用来链接其他目标文件的代码和数据,从而创建出可执行或可共享的目标文件
b.可执行目标文件:包含用于执行的程序,该文件规定了exec如何创建一个程序的进程映像
c.共享目标文件:包含用来在两个上下文之间链接的代码和数据
注:可重定位目标文件和共享目标文件用于程序链接,可执行目标文件用于程序执行
因为对于目标文件两种用途,因此目标文件的组织结构有两种:一种是用于链接的链接格式,另一种是用于执行的执行格式.
在详解这两种格式之前,先列出ELF文件中常用的数据类型(格式)
文章图片
这两种格式中,ELF头部都位于文件的开始部分,位置固定,描述了该文件的组织情况,下面是它的具体内容
elf32_hdr(一个52个字节):
文章图片
下面详细描述其中的内容(不加说明,值全是16进制):
1. e_ident,ident估计是identity的缩写,身份识别的意思.
这是一个总大小为16字节的数据,每个元素是占一个字节的unsigned char
文章图片
2. e_type:表示文件属于下面的哪一种类型
文章图片
3. e_machine:表示体系结构
4. e_version:目前版本
5. e_entry:程序入口地址
6. e_phoff:程序头部表的文件偏移,00000000表示没有程序头部表
7. e_shoff:节区头部表的文件偏移
8. e_flags:处理器特定标记
【3|ELF结构详细分析(1)---elf32_hdr】9. e_ehsize:elf头部长度,值是0034,表示十进制52
10.e_phentsize:程序头部表(段头部表)一个表项的大小
11.e_phnum:程序头部表表项数量
12.e_shentsize:节区头部表一个表项的大小
13.e_shnum:节区头部表表项数量
14.e_shstrndx:保存着节名字的节(section)对应的表项在节区头部表中的索引
推荐阅读
- Linux|109 个实用 shell 脚本
- linux笔记|linux 常用命令汇总(面向面试)
- Linux|Linux--网络基础
- linux|apt update和apt upgrade命令 - 有什么区别()
- linux|2022年云原生趋势
- Go|Docker后端部署详解(Go+Nginx)
- 3/100做好简单的事情
- 开源生态|GPL、MIT、Apache...开发者如何选择开源协议(一文讲清根本区别)