20135337——Linux实践三:ELF文件格式(64位系统,简单分析)

ELF文件格式简单分析

(具体分析见上一篇ELF文件格式32位系统)

ELF-header

第一行:
457f 464c :魔数;
0201 :64位系统,小端法
01 :文件头版本
剩余默认0;

第二行:
0001 :重定位文件
003e :x86-64处理器体系结构
0000 0001 :当前版本
0000 0000 0000 0000 :没有入口点

第三行:
0000 0000 0000 0000 :没有程序头表
0000 0000 0000 0308 :段表偏移地址

第四行:
0000 0000 :处理器特定标志
0040 :elf文件头大小
0000 :重定位文件没有程序头表
0000 :重定位文件没有程序头表
0040 :段头大小64字节,section header table中每个header的大小
000d :段表入口有13个,段表有13段
000a :段表字符串在段表中的索引号,.shstrab段的段表索引号10

Elf文件头的数据结构存储在位偏移0x0000 0000 0000 0000~~~0x0000 0000 0000 0039,共40h字节,即64字节;

段表存储在0x0000 0000 0000 0308~~~0x0000 0000 0000 0648,共40h*13=340h字节

查看符号表的数据结构

12个符号

Section

.text位偏移+段长度=.data的段偏移   0x003c+0x0040=0x007c
0x0061+0x02a0=0x0301;
0x0308+0x0340=0x648;
.shstrtab section与.symtab section之间存储的是段表;

注意:Address是section在内存中的虚拟地址,.o文件不需要执行,这里都是0;
Off是section与文件头之间的偏移;
Size是文件里面section占用的大小;

.text section是可执行指令的集合
位偏移0x0000 0040,size=0x0000 003c(即60字节)

.data section是初始化后数据的集合
位偏移0x0000 007c,size=0

.symtab section存放所有section中定义的符号名字
.strtab section位偏移0x0000 0208,size=0x0000 001b

原文地址:https://www.cnblogs.com/zzzz5/p/5527545.html