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:在文件的开始,保存了路 ...
随机推荐
- Java中的值栈
OGNL表示式使用 和 值栈 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts2框架使用OGNL作为默认的表达式 ...
- c# 去除文本的html标签
public static string ContentReplace(string input) { input = Regex.Replace(input, @"<(.[^> ...
- lucene-SpanNotQuery和SpanOrQuery交迭与全局跨度
1.在匹配结果中排除相互交迭的跨度 SpanNotQuery构造函数的第一个参数表示要包含的跨度对象,第二个参数表示要排除的跨度对象. 1) SpanNearQuery quick_fox=new S ...
- ARP/代理ARP
1.ARP首先讲到ARP,ARP是地址解析协议,它的作用是在以太网环境下,通过3层的IP地址来找寻2层的MAC地址,得到一张ARP缓存表.转发数据的时候根据ARP缓存表来进行传输.下图详细说明数据传输 ...
- HDU 3487 Play with Chain | Splay
Play with Chain Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- hdu_5718_Oracle(大数模拟)
题目连接:hdu_5718_Oracle 题意: 给你一串数,让你分出两个正整数,使其和最大,若不能分出来就输出"Uncertain" 题解: 当时比赛的时候还天真的去搞大数模版, ...
- LDA,PCA阅读资料
1,线性判别分析(Linear Discriminant Analysis)(一) 2,机器学习中的数学(4)-线性判别分析(LDA), 主成分分析(PCA) 3,Machine Learning i ...
- ACL in 和 out 区别 (重要)
acl中in和out的区别 in和out是相对的,比如: A(s0)-----(s0)B(s1)--------(s1)C www.2cto.com 假设你现在想拒绝A访问C,并且假设要求 ...
- linux proxy
ALL_PROXY=socks://192.168.2.1:3128/ HTTPS_PROXY=https://192.168.2.1:3128/HTTP_PROXY=http://192.168.2 ...
- 1381: Munching(BFS)
Description Bessie loves her grass and loves to hurry to the barn for her evening milking session. S ...