码迷,mamicode.com
首页 > 其他好文 > 详细

ELF分析 实践

时间:2016-06-01 22:49:07      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

 分析ELF文件:

首先编写一个.c文件,并使用gcc -c xx.c -o xx.o 对其进行编译。

我在这个实践中是ELF_1.o文件。

接下来输入ls -l ELF_1.o 查看重定位文件的信息。

技术分享

接下来以十六进制来查看该文件信息。输入:hexdump -x ELF_1.o 

显示信息的最左一列表示的是偏移地址的16进制表示。

查看ELF文件头定义的规范。打开elf.h查看各部分内容的定义。

 

 

技术分享

我们可以看出,32位的系统与64位的系统的ELF头部分结构大致相同。只是个别字段所占用的字节个数有不同罢了。

分析一下ELF头:

技术分享

第二行中的第三、四个字节为0x003e 表示是x86-64的处理器。后四个字节0x00000001,表示的是当前版本。后八个字节表示程序的入口点,当前为0.

第三行的前八个字节表示程序头表,当前为0.后八个字节为段表的偏移地址:0x00000000000003f0.

第四行中,第七、八个字节表示段头大小为64字节,第九、十字节表示段表的入口有13个。最后两个字节是表示段名串表(符号表)在段表中的索引号为10.

段表的分析:

技术分享

32位系统的段表定义每个段头大小是28H字节,而64位系统则变成了64字节(40H)。

40H*13=340H,ELF文件头数据结构存储在位偏移为0x0000000000000000-0x0000000000000039之间,而段表存储在0x00000000000003f0-0x0000000000000340之间。

符号表的分析:

技术分享

32位系统的符号表结构体大小是16字节,而64位系统符号表结构体的大小为22个字节。

技术分享

由图可知,一共15 个段表。

技术分享

 

text.section 起始位置、大小如图所示。

技术分享

text.section是可执行指令的集合,offset=0x00000040,size =74H.

data.section是初始化后数据的集合,offset=0x000000b4,size=4H.

symtab.section是存放所有section名字的集合。offset=0x00000140,size=150H.

strtab.section是存放所有符号的名字的集合。offset=0x00000290,size=1eH.

ELF分析 实践

标签:

原文地址:http://www.cnblogs.com/bushifudongjing/p/5548889.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!