ELF头简介
在linux中我们常用readelf指令来读取ELF (Executable and Linkable Format) 文件中的信息,本文主要介绍ELF头的基本信息
ELF头
elf头是位于elf文件的头部,里面存储着一些机器和该ELF文件的基本信息。
1 |
|
我们分别介绍其含义
1、e_ident
- 长度:16字节
- 简介:包含着文件和操作系统信息
Magic Num - e_ident[0:3]
前四个字节包含着一个 magic number,表示该文件是一个 ELF 文件
EI_Class - e_ident[4]
指示文件类型,是ELF32还是ELF64位
EI_DATA - e_ident[5]
指示文件的编码方式,是大端法还是小端法
ELFDATA2LSB - 小端法
ELFDATA2MSB - 大端法
EI_Version - e_ident[6]
标识ELF Version, 该值等于EV_CURRENT,目前为1
EI_OSABI - e_ident[7]
表示着该文件运行的操作系统
EI_ABIVERSION - e_ident[8]
标志着 ABI (应用二进制接口)的版本,ABI相当于硬件层级的API(见下图)
EI_PAD - e_ident[8:15]
填充位,用零填充用以对齐,可以预留给未来使用
2、e_type
长度:2字节
简介:指示文件类型
3、e_machine
长度:2字节
简介:指示机器类型
4、e_version
长度:4字节
简介:指示文件版本
5、e_entry
长度:4字节(32位)/8字节(64位)
简介:进程开始的虚拟地址
6、e_phoff
长度:4字节(32位)/8字节(64位)
简介:指向程序头部表的开始
7、e_shoff
长度:4字节(32位)/8字节(64位)
简介:指向节头部表的开始
8、e_flags
长度:4字节
简介:意义取决于目标架构
9、e_ehsize
长度:2字节
简介:该文件头部的大小
10、e_phentsize
长度:2字节
简介:程序头部的大小
11、e_phnum
长度:2字节
简介:程序头部的条目数
12、e_shentsize
长度:2字节
简介:节头部表的大小
13、e_shnum
长度:2字节
简介:节头部表的条目数
14、e_shstrndx
长度:2字节
简介:节头部表的条目和其位置 (idx) 的对应关系
Reference
[1] https://en.wikipedia.org/wiki/Executable_and_Linkable_Format
[2] https://refspecs.linuxfoundation.org/elf/gabi4+/ch4.eheader.html
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!