一、分析文件头

1. 段入口类型定义(/usr/include/elf.h)下面产生的hello是32位的

使用命令#Hexdump –x ELF_1.o

第一行:
前4字节,蓝色部分,是一个魔数,表示这是一个ELF对象
下一个字节(右边这个)01说明是个32位对象(64位的是02);
下一个字节是01,说明使用的是小端方式(PC大多使用)
下来一个字节01表示文件头版本,剩下默认设置为0
第二行:e_type(两个字节)值为0x0001,表示是一个重定位文件。
e_machine(两个字节)值为0x003e,表示是X86-64的处理器体系结构。
e_version(四个字节)值为0x00000001,表示是当前版本。
e_entry(八个字节)值为0x0000000000000000,表示没有入口点。
第三行:e_phoff(八个字节)值为0x0000000000000000,表示没有程序头表。
e_shoff(八个字节)值为0x0000000000000128,表示段表的偏移地址。
第四行: e_flags(四个字节)值为0x00000000,表示未知处理器特定标志(#defineEF_SH_UNKNOWN 0x0);e_ehsize(两个字节)值为0x0040,表示elf文件头大小;
e_phentsize(两个字节)值均为0x0000,因为重定位文件没有程序头表。
e_phnum(两个字节)的值为0x0000,因为重定位文件没有程序头表。
e_ehentsize(两个字节)值为0x0040表示段头大小为64个字节(由这里知道section header table里面每个header的大小)。
e_shnum(两个字节)值为0x000d,表示段表入口有13个(由这里知道段表有13个段)。
e_shstrndx(两个字节)值为0x000a,表示段名串表的在段表中的索引号(由这里知道.shstrtab段(符号表)的信息在段表的索引号是10)。

使用命令#readelf -h ELF_1.o


e_type表示文件类型,2表示可执行文件。

e_machine:指明可以在哪种机器结构中运行。

e_version:指明版本信息

e_entry:指明系统运行该程序时将控制权转交到的虚拟地址的值,如果没有则为零。

e_phoff: program header table在文件中的字节(Byte)偏移offset,如果没有program header table, 则该值为零。

e_shoff: section header table在文件中的字节偏移,如果没有section header table, 则该值为零

e_flags: 有关处理器的信息

e_ehsize: elf header的大小,单位:字节

e_phentsize: 在program header table中一个entry的大小,前面提到过,program header table & section header table都是数组,所以它们的每一个元素,即每一个entry的大小,都是一样的。

e_phnum: program header table中元素的个数,即entry的个数。

e_shentsize: section header table每一个entry的大小,与e_phentsize类似。

e_shnum: section header table中元素的个数,即entry的个数。可以看出来,这个program header table或者section header table的大小可以用entry的个数乘以每一个entry的大小得到。

e_shstrndx: 指明string name table在section header table中的index。

二、通过文件头找到section header table,理解内容

文件头信息:

段表section header table:

符号表symbol table:

由之前文件头的分析可知:e_shoff(4字节)值为0x00003403,表示段表的偏移地址

e_ ehentsize(2字节) 0x0028,表示段头大小为40字节(由此可知section header table 里面表个header的大小)

e_ shnum(2字节) 0x000d,表示段表入口地址有13个(由此知道段表有13个段)

段表大小 28H*d=520字节

0x00003403+0xH=0X00001CAC

所以从0x00003403—0X00001CAC,存储的是段表

实践——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文件格式分析

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

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

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

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

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

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

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

  6. 20135306 2.4 ELF文件格式分析

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

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

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

  8. ELF文件格式分析--结构篇

    ELF文件格式,全称为Excutable and Linking Format,是一个开放的可执行文件和链接文件格式,在LINUX上很流行,跨平台软件的设计也多以ELF格式作为标准,其结构扩展性兼容性 ...

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

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

随机推荐

  1. IO流(字节流,字符流,缓冲流)

    一:IO流的分类(组织架构) 根据处理数据类型的不同分为:字节流和字符流 根据数据流向不同分为:输入流和输出流   这么庞大的体系里面,常用的就那么几个,我们把它们抽取出来,如下图:   二:字符字节 ...

  2. 安装eclipse、maven等JAVA开发环境

    一 下载JAVA,这是官方JAVA8的下载地址,包含了JDK和JRE: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-dow ...

  3. 安装LIBXML2

    具体安装步骤: 1.解压:$tar zxvf libxml2-2.6.20.tar.gz 2.进入解压后的安装目录:$cd libxml2-2.6.20 3.安装三部曲:1)$./configure ...

  4. day16 Python filter函数

    前戏 movie_people = ["alex","charon","pluto","liu","sb&qu ...

  5. VsCode插件开发之入门示例

    主要参考官网:https://code.visualstudio.com/api/get-started/your-first-extension 其实也就三步 一.安装环境 npm install ...

  6. <<linux device driver,third edition>> Chapter 3:Char Drivers

    The Internal Representation of Device Numbers Within the kernel,the dev_t type(defined in linux/type ...

  7. Python内存优化:Profile,slots,compact dict

    实际项目中,pythoner更加关注的是Python的性能问题,之前也写过一篇文章<Python性能优化>介绍Python性能优化的一些方法.而本文,关注的是Python的内存优化,一般说 ...

  8. python 对时间操作

    from datetime import datetime,timedelta 'date_test':fields.function(_datetime_all,type='datetime',  ...

  9. AngularJs的ng-include的使用与实现

    想在angularjs动态加载一个内容,我们可以使用ng-include来实现. 今天Insus.NET就在ASP.NET MVC环境中,举个例子来演示它的功能. 你可以在一个视图动态加载任一其它视图 ...

  10. Java 面试题 队列

    Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构 Queue接口与List.Set同一级别,都是继承了Collection接口.LinkedList实现了Deque接 口.   Q ...