ELF Format 笔记(二)—— ELF Header
ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287
以 32 位的 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;
1、e_ident
ELF 标识。是一个 16 字节大小的数组,其各个索引位置的字节数据有固定的含义。

前 4 个字节 e_ident[EI_MAG0] ~ e_ident[EI_MAG3] 的内容固定为 0x7f、’E’、’L’、’F’,标识这是一个 ELF文件。
e_ident[EI_CLASS] 指明文件类别:0(无效目标文件);1(32 位目标文件);2(64 位目标文件)。
e_ident[EI_DATA] 指明字节序,规定该文件是大端还是小端:0(无效编码格式);1(小端);2(大端)。
e_ident[EI_VERSION] 指明 ELF 文件头的版本。
从 e_ident[EI_PAD] 到 e_ident[EI_NIDENT-1] 之间的 9 个字节保留。
2、e_type
文件类型。常见的:1(可重定位文件:“.o 文件”);2(可执行文件);3(共享库文件:“.so 文件”)。

3、e_machine
指定该程序在什么平台上使用,比如 EM_386 表示在 Inter x86 机器上使用。
4、e_version
ELF 文件版本号。
5、e_entry
程序的入口虚拟地址。对于可执行文件来说,当 ELF 文件加载完成后,将从这个地址开始执行。对于其它文件,该值为 0。
6、e_phoff / e_shoff
分别指明 Program Header Table 和 Section Header Table 在文件中的字节偏移量,没有则为 0。
7、e_flags
处理器特定的标志位,通常不怎么关心。
8、e_ehsize
指明 ELF 文件头的字节大小(52 个字节)。
9、e_phentsize / e_phnum
e_phentsize 指明在 Program Header Table 中的每一项的字节大小,e_phnum 指明共有多少项。
10、e_shentsize / e_shnum
e_shentsize 指明在 Section Header Table 中的每一项的字节大小,e_shnum 指明共有多少项。
11、e_shstrndx
在 Section Header Table 中,存储“节名字表”的 Section(就是 .shstrtab 节)所对应的索引。
ELF Format 笔记(二)—— ELF Header的更多相关文章
- ELF Format 笔记(十二)—— 段类型(segment types)
ilocker:关注 Android 安全(新手) QQ: 2597294287 PT_NULL:如果段类型是 PT_NULL,那相应程序头结构体的其它成员都无意义,该程序头项可被忽略. 暂时还没遇到 ...
- ELF Format 笔记(四)—— 节(Section)
ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 ELF 文件可以包含很多 section,所有的 section 都在 section header tab ...
- ELF Format 笔记(十四)—— 段内容
ilocker:关注 Android 安全(新手) QQ: 2597294287 一个段 (segment) 由一个或多个节 (section) 组成,但这对 android linker 是透明的, ...
- ELF Format 笔记(一)—— 概述
ilocker:关注 Android 安全(新手) QQ: 2597294287 ELF Object files 参与程序的链接和执行,从这两个角度分别有两种视图: ELF header 位于文件的 ...
- ELF Format 笔记(三)—— Section Types
ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 ELF 文件中会包含很多 section,所有的 section 都在 section header tab ...
- ELF Format 笔记(八)—— 符号的类型和属性(st_info)
我是天空里的一片云,偶尔投影在你的波心,你不必讶异,更无须欢喜,在转瞬间消灭了踪影.你我相逢在黑夜的海上,你有你的,我有我的,方向:你记得也好,最好你忘掉,在这交会时互放的光亮! —— 徐志摩·偶然 ...
- ELF Format 笔记(十五)—— 符号哈希表
ilocker:关注 Android 安全(新手) QQ: 2597294287 符号哈希表用于支援符号表的访问,能够提高符号搜索速度. 下表用于解释该哈希表的组织,但该格式并不属于 ELF 规范. ...
- ELF Format 笔记(五)—— 特殊 Section
ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 链接器把一些独立的 object files 和库文件链接起来,形成可执行文件.在这个过程中,链接器需要解决 ...
- ELF Format 笔记(六)—— 字符串表
ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 字符串表中包含若干以 null 结尾的字符串,这些字符串通常是 symbol 或 section 的名字.当 ...
随机推荐
- vim自动补全插件YouCompleteMe
前言 Valloric/YouCompleteMe可以说是vim安装最复杂的插件之一,但是一旦装好,却又是非常好用的.YouCompleteMe简称ycm 在安装折腾的过程中,我再一次的体会到,除了官 ...
- 使用 FocusPoint.js 实现图片的响应式裁剪
通常网站的布局都不是单一的.例如图像在电脑.平板和智能手机上可能显示的形状是不同的.特别是如果你使用的是全屏图像,在你必须使用相同的图像文件的情况下,你的主题可能会被截断或完全缺失,或者看起来很尴尬. ...
- 1001Freedownloads – 免费下载海量素材
1001FreeDownloads.com 力求超越所有其他的互联网搜索体验,它拥有超过1000个免费的设计图像和字体的目录.这个独特的网站提供了多种可以用来作为剪贴簿页面,图标和壁纸.不管你需要什么 ...
- easyUI 后台经典框架DEMO下载
采用easyui 1.2.6 + jquery 1.7.2 设计 有不明白的朋友加群或加我QQ (709047174) Jquery-EasyUi-demo点击我下载
- eclipse 常用设置,常用快捷键修改
eclipse 常用设置,常用快捷键,myeclipse和eclipse类似' 首先打开eclipse的首选项-->搜索 keys' 常用的一些快捷键: Ctrl+1 快速修复(最经典的快捷键, ...
- BASIS--笨办法解决ALV_GRID的列剪切丢失纪录的错误
最近经常有业务人员问及在ALV_grid输出报表中,选择某一列,点击左键,并点击弹出菜单的复制文本,复制出的文本存在丢失 (纪录不少,但部分纪录的文本丢失).该如何解决呢? 后来跟踪代码发现这个命令没 ...
- [Android]竖直滑动选择器WheelView的实现
以下内容为原创,转载请注明: 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3819304.html 公司项目中有这么一个需求,所以需要自己实现下.效 ...
- 关于condition variable的理解
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...
- Android Activity生命周期详讲
管理 Activity 生命周期 通过实现回调方法管理 Activity 的生命周期对开发强大而又灵活的应用至关重要. Activity 的生命周期会直接受到 Activity 与其他 Activit ...
- GitHub Top 100 的项目(iOS)
主要对当前 GitHub 排名前 100 的项目做一个简单的简介, 方便初学者快速了解到当前 Objective-C 在 GitHub 的情况. Android 版本的在此: https://gith ...