剖析ELF文件格式的内容———文件头,段表,符号....(第三章)

ELF文件跟编译链接息息相关,但是具体他的内容是什么呢?本文介绍的是ELF文件文件的格式。

格式就是按照一定的规则组织起来的,所以凡是有格式,那么只要相应的软件按照格式去解析他,就能展示出可读信息,以下是一些相关的命令(程序):

比如readelf 是linux下查看elf文件格式的命令,直接输入readelf可以看帮助文档,不同的参数展示不同的内容。

比如file 命令来看具体属于什么格式的文件,读取的就是文件头。

比如nm 查看 .a 中的目标文件有哪些,符号有哪些。

还有objdump。

首先介绍的是文件头(文件头很好理解,就是一个小总结,没有文件头,你就不知道后面的是什么。文件头小而重要。可以更快的找到需要的内容)

然后介绍是段表的内容(段表啊,符号表啊这些也是跟编译链接中的术语)

然后介绍是符号表中的符号

然后介绍编译器对符号的修饰,以及对符号的强弱的区分以及意义,最后介绍elf中的调试信息段。

还有还有。。。。看目录吧

概念比较多文章比较长,建议分词看,一次只看一部分(读者忽略:本次修改 已经看到1)。

看过一遍可能也会忘记,但是看了一遍以后,会对编译链接的过程更加清楚。


目录

文件头

1.readelf -h——查看文件头内容的命令

2.文件头结构体Elf32_Ehdr——定义在/usr/include/elf.h中

2.段表

1.使用readelf -S看elf文件格式的全部段表

2./usr/include/elf.h中定义的Elf32_Shdr

3.其他段(动态链接相关的段后面介绍)

3.符号表中的符号

1.使用nm 和 readelf -s 看符号表的符号

2./usr/include/elf.h中定义的Elf32_Sym

3.可执行文件中的特殊的符号

4.符号的修饰

C语言符号修饰

C++符号修饰

extern “C”

5.符号的强弱StrongSymbol WeakSymbol

强符号和弱符号

符号的强引用和弱引用

6.调试信息

7.elf中动态链接相关的段

.interp 段——指定动态链接器的位置

.dynamic段——动态链接下elf的“文件头”

符号表.dynsym段——动态链接下的“符号表”(vs:symtab是保存了所有符号)

.got段 和.got.plt段——PIC技术下的GOT

1)ELF将GOT分成了.got和.got.plt两个段

2)解析 .got.plt的内容

.plt段和.plt.got段——每个外部函数在plt中都有对应的一个项

重定位表.rel.dyn段 和 rel.plt段——分别相当于静态链接中的.rel.text和.rel.data

 重定位入口类型——对比前文静态链接是的重定位:查看 编译和链接过程(第2章)

重定位过程

不用PIC模式编译的共享库

8.运行时库和启动文件相关的段

1.相关的目标文件 在/usr/lib64 或 /usr/lib下

crti.o和 crtn.o——有 .init 段和 finit段 

 crt1.o:

2.init 和 fini 段

3.分析最终可执行文件的init段

3.crt1.o的内容

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ivy_0709

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值