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的更多相关文章

  1. ELF Format 笔记(十二)—— 段类型(segment types)

    ilocker:关注 Android 安全(新手) QQ: 2597294287 PT_NULL:如果段类型是 PT_NULL,那相应程序头结构体的其它成员都无意义,该程序头项可被忽略. 暂时还没遇到 ...

  2. ELF Format 笔记(四)—— 节(Section)

    ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 ELF 文件可以包含很多 section,所有的 section 都在 section header tab ...

  3. ELF Format 笔记(十四)—— 段内容

    ilocker:关注 Android 安全(新手) QQ: 2597294287 一个段 (segment) 由一个或多个节 (section) 组成,但这对 android linker 是透明的, ...

  4. ELF Format 笔记(一)—— 概述

    ilocker:关注 Android 安全(新手) QQ: 2597294287 ELF Object files 参与程序的链接和执行,从这两个角度分别有两种视图: ELF header 位于文件的 ...

  5. ELF Format 笔记(三)—— Section Types

    ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 ELF 文件中会包含很多 section,所有的 section 都在 section header tab ...

  6. ELF Format 笔记(八)—— 符号的类型和属性(st_info)

    我是天空里的一片云,偶尔投影在你的波心,你不必讶异,更无须欢喜,在转瞬间消灭了踪影.你我相逢在黑夜的海上,你有你的,我有我的,方向:你记得也好,最好你忘掉,在这交会时互放的光亮! —— 徐志摩·偶然 ...

  7. ELF Format 笔记(十五)—— 符号哈希表

    ilocker:关注 Android 安全(新手) QQ: 2597294287 符号哈希表用于支援符号表的访问,能够提高符号搜索速度. 下表用于解释该哈希表的组织,但该格式并不属于 ELF 规范. ...

  8. ELF Format 笔记(五)—— 特殊 Section

    ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 链接器把一些独立的 object files 和库文件链接起来,形成可执行文件.在这个过程中,链接器需要解决 ...

  9. ELF Format 笔记(六)—— 字符串表

    ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 字符串表中包含若干以 null 结尾的字符串,这些字符串通常是 symbol 或 section 的名字.当 ...

随机推荐

  1. MOSOS基础(转自树人云)

      发现 话题 · · · 登录 注册 MesosDocker 回顾Java 发展,看 Docker 与Mesos 演讲嘉宾数人云COO 谢乐冰在德国工作十年,回国后加入惠普电信运营商部门,拥有多年项 ...

  2. 巧用loadrunner代理,录制手机APP脚本

    利用loadrunner代理方式录制手机(iPhone.android)应用程序HTTP脚本 1.利用笔记本网卡或者类似360随身wifi,在安装loadrunner的电脑上共享网络,在手机上连接共享 ...

  3. Git修改提交的用户名和Email

    git config --global user.name "Your Name" git config --global user.email you@example.com

  4. Javascript 语言精粹 代码片段合集

    Javascript 语言精粹 代码片段合集 标签:Douglas-Crockford Javascript 最佳实践 原文链接 更好的阅读体验 使用一个method 方法定义新方法 Function ...

  5. HTML5 学习笔记(五)——WebSocket与消息推送

    B/S结构的软件项目中有时客户端需要实时的获得服务器消息,但默认HTTP协议只支持请求响应模式,这样做可以简化Web服务器,减少服务器的负担,加快响应速度,因为服务器不需要与客户端长时间建立一个通信链 ...

  6. 前端优秀作品展示,JavaScript 版水果忍者

    <水果忍者>是一款非常受喜欢的手机游戏,刚看到新闻说<水果忍者>四周年新版要上线了.网页版的切水果游戏由百度 JS 小组开发,采用 vml + svg 绘图,使用了 Rapha ...

  7. CSS常用样式(四)之animation

    上篇CSS常用样式(三)这篇博文中已经介绍过了CSS中具有动画效果的transition.transform,今天来大概说说CSS中的animation.animation的加入会使得动画效果更加乐观 ...

  8. java连接hbase报错

    报错信息如下: The node /hbase is not in ZooKeeper. It should have been written by the master. Check the va ...

  9. C/C++构建系统 GNU autotool

    我们在网上经常可以看到c/c++开源的项目,其中很多都是使用GNU的构建系统进行配置和编译的,如果按照规范构造这些的步骤,有一定的门槛和复杂度,下文把关于auotools系列的工具和概要的流程简要汇总 ...

  10. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q66-Q68)

    Question 66 You are designing an application that will use a timer job that will run each night to s ...