ELF文件格式分析--结构篇
ELF文件格式,全称为Excutable and Linking Format,是一个开放的可执行文件和链接文件格式,在LINUX上很流行,跨平台软件的设计也多以ELF格式作为标准,其结构扩展性兼容性都很强.
ELF结构分析起来主要有两种模式,一是编译时模式,另一个是运行时模式,同一个文件在不同的时期用不同的眼光看,数据虽然没变化,但是着重点是不同的,在编译器,文件以数据节的形式分区,在运行时期,文件以程序段的形式分区
基本结构如下
可以看到,段,其实就是由节组成的,这篇文章中我们仅仅讨论节,也就是说,仅仅讨论链接视图,首先我们先得知道ELF的数据类型定义
首先是ELF头,ELF头是ELF文件的标识,读取一个ELF文件总是从ELF头开始的,他总是在文件的开头,结构如下
ELF头开头的结构体叫做魔数头,是一个16位的数组,(从第九位开始,就是填充字节,没有意义的数据)关于它的定义如下
ELF头结构体虽然每一个数据的长度都不同,但是在文件的存储上,它是以每个数据四位的情况来存储的,只是说四位数据里面有效数据是那么长,这样可以避免文件读取的时候的结构体对齐的问题
通过ELF头我们可以看到,ELF头指定了文件节区头表的文件偏移地址,以及节区头表的数目和大小,通过这个,我们可以读到节区头表,也就是说,节区头表不一定是紧挨在ELF头的后面,他们的关系如下
节区表类似于一个数组,防止了e_shnum个节区头信息,每个节区头信息的长度是e_shensize,这e_shnum个节区在文件中的存放时连续的,节区头信息如下
通过节区头数据的sh_offset,我们可以找到这个节区头对应的节区数据,节区数据也不是连续存放在文件中的
节区数据根据节区头信息的sh_type信息有几种分类
当sh_type为1,这是一个程序数据表,里面存放的是代码二进制数据,长度为节头指定长度
当sh_type为2,这是一个符号表,相当于一个数组,里面存放的结构体,数组长度为sh_size/sh_entsize,每个结构体的定义如下
当sh_type为3,这是一个字符串表,里面存放着一些字符,相当于一个字符数组,一个ELF文件里面有两个字符串表,一个叫做节区头符串表,一个叫做通用字符串表.我们在节区头里面可以看到有一个sh_name,这是一个数字,我们需要去节区字符串表中寻找对应的字符串,寻找方式是,从sh_name中获得的字符串开始索引,直到遇到’\0’字符停止,得到的数据就是该节区字符串表的名称,节区字符串表存放在sh_strndx指向的节区里面,其他的所有名称都存放在另一个字符串表中,
当sh_type为9,这是一个重定位表,依然相当于一个数组,里面存放了重定位结构体数组,数组长度为sh_size/sh_entsize,每个结构体的定义如下
重要的数据基本就是这些
ELF文件格式分析--结构篇的更多相关文章
- 实践2.4 ELF文件格式分析
实践2.4 ELF文件格式分析 1.ELF文件头 查看/usr/include/elf.h文件: #define EI_NIDENT (16) typedef struct { unsigned ch ...
- Linux课题实践四——ELF文件格式分析
2.4 ELF文件格式分析 20135318 刘浩晨 ELF全称Executable and Linkable Format,可执行连接格式,ELF格式的文件用于存储Linux程序.ELF文件(目 ...
- linux第三次实践:ELF文件格式分析
linux第三次实践:ELF文件格式分析 标签(空格分隔): 20135328陈都 一.概述 1.ELF全称Executable and Linkable Format,可执行连接格式,ELF格式的文 ...
- 20135337——linux实践三:ELF文件格式分析(32位系统)
ELF文件格式分析 可重定位文件 十六进制形式显示内容 显示各个段.符号表相关信息 查看各个段信息 elf文件头信息 段表 符号表信息 查看堆栈 具体分析 1.ELF文件头信息(小字节优先,均十六进制 ...
- 20135306 2.4 ELF文件格式分析
2.4 ELF文件格式分析 20135306 黄韧 ELF全称Executable and Linkable Format,可执行连接格式,ELF格式的文件用于存储Linux程序.ELF文件(目标 ...
- Linux及安全实践四——ELF文件格式分析
Linux及安全实践四——ELF文件格式分析 一.ELF文件格式概述 1. ELF:是一种对象文件的格式,用于定义不同类型的对象文件中都放了什么东西.以及都以什么样的格式去放这些东西. 二.分析一个E ...
- Linux课程实践四:ELF文件格式分析
一.ELF文件格式概述 1. ELF文件 ELF:Executable and Linking Format,是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东 ...
- 20135218 实践四 ELF文件格式分析
一 :概述 ELF全称Executable and Linkable Format,可执行连接格式,ELF格式的文件用于存储Linux程序.ELF文件(目标文件)格式主要三种: (1)可重定向文件:文 ...
- ELF文件格式分析
一般的 ELF 文件包括三个索引表:ELF header,Program header table,Section header table. 1)ELF header:在文件的开始,保存了路 ...
随机推荐
- Singleton ——运行时全局唯一对象
Singleton 运行时全局唯一对象 Singleton模式只解决一个问题,如何做到运行时创建一个全局唯一的对象? 1:隐藏类的实例化操作,即将构造函数声明为private或protected.任何 ...
- FRP 浅析
一.Reactive? 请先看一个非常简单的小应用,它允许用户在一个搜索输入框里输入关键词,然后在其下方的结果区域实时显示从Flicker网站搜索得到的图片,当用户输入的关键词发生变化,显示的图片也会 ...
- jquery从tr获取td
已知HTML:<tr id="row001"><td>001</td><td>张三</td></tr>JQU ...
- Theos tweak MSHookFunction
#import "substrate.h" static FILE * (*s_orig_fopen) ( const char * filename, const char * ...
- [转]Android之Context和Activity互相转换
1.context转换为activity Activity activity = (Activity) context; 2.从activity得到context 在activity的方法中用cont ...
- 解决 UNMOUNTABLE_BOOT_VOLUME 蓝屏【转载】
现象:一台XP系统的机器,开机在滚动条阶段蓝屏,蓝屏代码大概是“UNMOUNTABLE_BOOT_VOLUME”. 用PE进系统后发现C盘的文件格式变为RAW,总容量等变为0 解决方法一:将故障机的硬 ...
- 转:透析QTP自动化测试框架SAFFRON
1.为什么要使用框架? 框架是一组自动化测试的规范.测试脚本的基础代码,以及测试思想.惯例的集合.可用于减少冗余代码.提高代码生产率.提高代码重用性和可维护性.例如QTestWare就是QTP自动化测 ...
- PAT (Advanced Level) 1099. Build A Binary Search Tree (30)
预处理每个节点左子树有多少个点. 然后确定值得时候递归下去就可以了. #include<cstdio> #include<cstring> #include<cmath& ...
- C#入门经典第四章-流程控制-1
布尔类型:
- zf-关于分页的行数如何配置
公司的项目分页显示行数是在web.xml里配置的 对应的java 文件是 BaseAction 这个文件里面写的就是分页的代码