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

时间:2024-01-04 08:19:26

ELF文件格式分析

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

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

可重定位文件

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

十六进制形式显示内容

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

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

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

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

查看各个段信息

elf文件头信息

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

段表

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

符号表信息

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

查看堆栈

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

具体分析

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

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

第一行:

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

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

第一节区:为空

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

第二节区:

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

第三节区:

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

第四节区:

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

五:

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

六:

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

七:

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

八:

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

九:

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

十:

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

十一:(索引号为a)

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

十二:

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

十三:

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

分析

第二节区:

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

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

第十一节区:

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

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

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

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

.text段

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

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

对应的ASCII码翻译出来对应着MAIN函数的机器代码
(以此类推,不再赘述!)
对应代码:
#include <stdio.h>
main()
{
printf("elf");
}