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:在文件的开始,保存了路 ...
随机推荐
- monkeyrunner对比屏幕局部图像.getSubImage()
monkeyrunner对比屏幕局部图像.getSubImage() monkeyrunner执行测试时使用.takeSnapshot()截图,默认截取整个屏幕,包含了系统的状态栏.真实手机状态栏中包 ...
- sql 日结
--生成日结数据 ==================================== -- Author: <Author,,Name> -- Create date: <Cr ...
- Linux中java项目环境部署,简单记录一下
这里只是简单的记录一下linux环境下面如何快速的搭配好环境,使你的项目能在linux环境上面运行. 很多时候,我们都是用windows环境进行配置调试的,而真正很多服务器都是在linux服务器上面的 ...
- Django: 配置和静态文件
运行django-admin.py startproject [project-name] 命令会生成一系列文件,在django 1.6版本以后的settings.py文件中有以下语句: # Buil ...
- ZooKeeper概述
1.Zookeeper概述 Zookeeper 是 Google 的 Chubby一个开源的实现,是 Hadoop 的分布式协调服务.它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置 ...
- Android音乐编程:管理音频焦点
Android 系统保持相互独立的音频流通道来播放音乐,报警,通知,来电铃声,系统声音,呼叫(通话)音量,和 DTMF 音调(键盘拨号).这样做主要是为了使用户能够独立地控制每个流的音量. AD: h ...
- opentsdb
http://blog.javachen.com/2014/01/22/all-things-opentsdb.html http://blog.csdn.net/bingjie1217/articl ...
- winxp iis5中修改最大连接数及添加多个站点
winxp iis5中修改最大连接数及添加多个站点 最 近用asp做一些东西,需要用到iis,还需要用photoshop做一些图片.以前都是在win2003下面做,可是photoshop里面很多中文字 ...
- 1107: 单向公路(bfs+输入整理)(DFS也可以,而且更快)
Description 某个地区有许多城镇,但并不是每个城镇都跟其他城镇有公路连接,且有公路的并不都能双向行驶.现在我们把这些城镇间的公路分布及允许的行驶方向告诉你,你需要编程解决通过公路是否可以从一 ...
- [转]httpclient 上传文件、下载文件
用httpclient4.3 post方式推送文件到服务端 准备:httpclient-4.3.3.jar:httpcore-4.3.2.jar:httpmime-4.3.3.jar/** * 上传 ...