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

ELF文件格式分析


可重定位文件

十六进制形式显示内容

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

查看各个段信息

elf文件头信息

段表

符号表信息

查看堆栈

具体分析

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

第一行:

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为段名串表的索引号;

第一节区:为空

第二节区:

第三节区:

第四节区:

五:

六:

七:

八:

九:

十:

十一:(索引号为a)

十二:

十三:

分析

第二节区:

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

第十一节区:

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

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

.text段


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

对应代码:
#include <stdio.h>
main()
{
printf("elf");
}
原文地址:https://www.cnblogs.com/zzzz5/p/5527450.html