《程序员的自我修养》读书笔记:ELF文件结构描述

用readelf命令详细查看ELF文件

Entry point address: 0x0 

入口地址,规定ELF程序的入口虚拟地址,OS在加载完该程序后从这个地址开始执行进程的指令。

可重定位文件(Type: REL)一般没有入口地址,则这个值为0.

Start of section headers: 280(bytes into file)

段表在文件中的偏移。

-------------------------------------------------------------------------------------------------------------------

段表(Section Header Table)保存ELF文件中段的基本属性的结构。

编译器、链接器和装载器都是依靠段表来定位和访问各个段的属性的。

查看段表结构

段表是一个以“Elf32_Shdr”结构体为元素的数组。每个“Elf32_Shdr”(段描述符)结构体对应一个段。

sh_name 段名是个字符串,位于一个叫做“.shstrtab”的字符串表。sh_name是段名字符串在“.shstrtab”中的偏移。

sh_addr 如果该段可以被加载,则sh_addr为该段被加载后在进程地址空间中的虚拟地址;否则为0.

sh_offest 若该段存在于文件中,表示该段在文件中的偏移;否则无意义(如BSS段)。

最后一个段偏移为0X508,大小为0X10,所以SimpleSection.o的大小为0X518。

----------------------------------------------------------------------------------------------------------------------------------

重定位表

链接器在处理目标文件时,须要对目标文件中的某些部位进行重定位,即代码段和数据段中的那些对绝对地址的引用的位置。

这些重定位的信息都记录在ELF文件的重定位表里面。

对于每个需要重定位的代码段或数据段,都会有一个相应的重定位表。如".rel.text"是针对".text"段的重定位表。

----------------------------------------------------------------------------------------------------------------------------------

字符串表

因为字符串的长度往往是不定的,所以用固定的结构来表示它比较困难。

常见做法:把字符串集中起来存放到一个表,然后用字符串在表中的偏移来引用。

".strtab" 字符串表,保存普通的字符串

".shstrtab" 段表字符串表,用来保存段表中用到的字符串,如段名。

第一张图的Section header string table index:10 为".shstrtab"在段表中的下标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值