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

ELF文件格式分析

744834-20160525160245491-1220044521.png
744834-20160525160253913-1681637792.png

可重定位文件

744834-20160525160306491-1010225040.png

十六进制形式显示内容

744834-20160525160316194-2041459494.png

显示各个段、符号表相关信息

744834-20160525160328881-2000920760.png

744834-20160525160528959-804053105.png

查看各个段信息

elf文件头信息

744834-20160525160458256-984038754.png

段表

744834-20160525160518600-723524117.png

符号表信息

744834-20160525160552147-98522491.png

查看堆栈

744834-20160525160608334-1394759576.png

具体分析

1.ELF文件头信息(小字节优先,均十六进制)
744834-20160525160632897-124107231.png

第一行:

7f45 4c46 (DEL E L F)  0101 (32位对象 小端法)  0100(文件头版本) 0000 0000 0000 0000
第二行:

0001(重定位文件) 0003(intel80386处理器)  0000 0001(当前版本)
0000 0000(没有入口点)
0000 0000(程序表头偏移地址,没有程序头表)
第三行:

0000 0214(段表偏移地址)
0000 0000 (未知处理器特定标识符)
0034(ELF文件头大小) 由此可知section headers table中每个header的大小是52字节;
0000(程序表头大小,重定位文件没有程序头表) 
0000(程序入口个数,重定位文件没有程序头表)
0028(段表头大小为64字节)

第四行:

000d(段表头入口个数有13个)
000a(段名串表索引)由此可知.shstrtab段(符号表)的信息在段表的索引号是10;

由elf头知,段表从0x0000 0214开始,每个节区大小0x0028,共有0x000d个节区,第0x000a为段名串表的索引号;

744834-20160525160838038-1797300687.png

第一节区:为空

744834-20160525160828850-1288160689.png

第二节区:

744834-20160525160853616-1712646925.png

第三节区:

744834-20160525160905788-1957585486.png

第四节区:

744834-20160525160920256-1762676214.png

五:

744834-20160525160932319-1440359178.png

六:

744834-20160525160945147-1252038176.png

七:

744834-20160525160957116-1018036654.png

八:

744834-20160525161006084-176754001.png

九:

744834-20160525161018834-1547292176.png

十:

744834-20160525161037413-311062722.png

十一:(索引号为a)

744834-20160525161053444-1987765096.png

十二:

744834-20160525161104116-200770799.png

十三:

744834-20160525161116741-1155033898.png

分析

第二节区:

744834-20160525161138006-1581247153.png

001f 0000 :此节区段名在段名串表中的偏移是0000 001f 
0034 0000 :段的起始位置是0000 0034
002e 0000 :段大小是0000 002e
第十一节区:

744834-20160525161224053-1996812757.png

找到起始位置000001b4,大小0000005f的段名串表

744834-20160525161348225-497841116.png

由2e6c 6574可知,偏移为0000001f的第二节区名,对应ASCII码为.text,可知第二节区为.text段的信息:段起始位置0x0000 0034;段的大小0x0000 002e
.text段

744834-20160525161415928-1504672399.png
744834-20160525161421413-1584310577.png

对应的ASCII码翻译出来对应着MAIN函数的机器代码
(以此类推,不再赘述!)

对应代码:
#include <stdio.h>
main()
{
printf("elf");
}

转载于:https://www.cnblogs.com/zzzz5/p/5527450.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值