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文件格式分析--结构篇的更多相关文章

  1. 实践2.4 ELF文件格式分析

    实践2.4 ELF文件格式分析 1.ELF文件头 查看/usr/include/elf.h文件: #define EI_NIDENT (16) typedef struct { unsigned ch ...

  2. Linux课题实践四——ELF文件格式分析

    2.4   ELF文件格式分析 20135318 刘浩晨 ELF全称Executable and Linkable Format,可执行连接格式,ELF格式的文件用于存储Linux程序.ELF文件(目 ...

  3. linux第三次实践:ELF文件格式分析

    linux第三次实践:ELF文件格式分析 标签(空格分隔): 20135328陈都 一.概述 1.ELF全称Executable and Linkable Format,可执行连接格式,ELF格式的文 ...

  4. 20135337——linux实践三:ELF文件格式分析(32位系统)

    ELF文件格式分析 可重定位文件 十六进制形式显示内容 显示各个段.符号表相关信息 查看各个段信息 elf文件头信息 段表 符号表信息 查看堆栈 具体分析 1.ELF文件头信息(小字节优先,均十六进制 ...

  5. 20135306 2.4 ELF文件格式分析

    2.4   ELF文件格式分析 20135306 黄韧 ELF全称Executable and Linkable Format,可执行连接格式,ELF格式的文件用于存储Linux程序.ELF文件(目标 ...

  6. Linux及安全实践四——ELF文件格式分析

    Linux及安全实践四——ELF文件格式分析 一.ELF文件格式概述 1. ELF:是一种对象文件的格式,用于定义不同类型的对象文件中都放了什么东西.以及都以什么样的格式去放这些东西. 二.分析一个E ...

  7. Linux课程实践四:ELF文件格式分析

    一.ELF文件格式概述 1. ELF文件 ELF:Executable and Linking Format,是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东 ...

  8. 20135218 实践四 ELF文件格式分析

    一 :概述 ELF全称Executable and Linkable Format,可执行连接格式,ELF格式的文件用于存储Linux程序.ELF文件(目标文件)格式主要三种: (1)可重定向文件:文 ...

  9. ELF文件格式分析

    一般的 ELF 文件包括三个索引表:ELF  header,Program  header  table,Section header table. 1)ELF  header:在文件的开始,保存了路 ...

随机推荐

  1. centos6.5 安装git

    1.安装编译git时需要的包 # yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel # yum ins ...

  2. Loadrunner之文件的下载(八)

    老猪提供: https://mp.weixin.qq.com/s?__biz=MzIwOTMzNDEwNw==&mid=100000013&idx=1&sn=624f5bc74 ...

  3. [转]Android 导入v7包常见错误,以及项目引用v7包错误解决

    android下v4    v7   v21等包是android系统的扩展支持包,就想windows的系统补丁一个道理. android的扩展包主要是用来兼容低版本的,比如android3.0以后出现 ...

  4. hdu-1978_How many ways dfs+记忆化搜索

    How many ways Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total ...

  5. java.lang.IllegalArgumentException: Can't convert argument: null

    出现这样的异常:: 这是由于eclipse在修改项目名的时候,eclipse自动更新部署了web.xml文件 并且重新生成了xml文件的头部声明. 新增了java的命名把这个javaee去掉就可以了. ...

  6. Git 分支 - 分支的衍合

    分支的衍合 把一个分支中的修改整合到另一个分支的办法有两种:merge 和 rebase(译注:rebase 的翻译暂定为“衍合”,大家知道就可以了.).在本章我们会学习什么是衍合,如何使用衍合,为什 ...

  7. jquery指定div右键事件

    <div class="nav_list_item">需要淡季右键的div</div> 我们要 给这个div注册鼠标右键的时候需要先禁用该div的网页右键菜 ...

  8. 第13章 Swing程序设计----常用事件监听器

    组件本身并不带有任何功能.这时需要为这些组件添加特定事件监听器. Swing中常用的两个事件监听器,即动作事件监听器和焦点事件监听器.

  9. 解决:无法将“Add-Migration”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次

    1.输入的中划线“-”格式不对,检查是否为全角状态下输入,误输入了下划线“_",或是前后有空格: 2.没有引用EntityFramework命令,请执行如下名称(Import-Module ...

  10. 【转】js/jquery中刷新iframe方法(兼容主流)

    一.js实现刷新两种方式: 1.//方法1 2.document.getElementById('FrameID').contentWindow.location.reload(true); 3.// ...