elf文件中的.plt .rel.dyn .rel.plt .got .got.plt的关系

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了elf文件中的.plt .rel.dyn .rel.plt .got .got.plt的关系相关的知识,希望对你有一定的参考价值。

.plt的作用是一个跳板,保存了某个符号在重定位表中的偏移量(用来第一次查找某个符号)和对应的.got.plt的对应的地址

.rel.dyn保存了.got段的开始地址,未证明

.rel.plt保存了重定位表的信息

.got据说是保存了elf文件本身的各个符号的偏移量,即不要动态链接,未证明

.got.plt保存了重定位地址。

比如printf是一个重定位符号,需要连接该符号时过程是这样:

main函数call  .plt段中的一个地址,这里的第一句话就是调转到.got.plt中的保存的printf的地址,如果是第一次,那么保存的地址就是.plt中的下一句话,这个下一句话就是压入这个符号在.rel.plt中的重定位表的偏移量,然后ld程序就会根据重定位表中的信息加上这个偏移量找到这个地址,保存到重定位表所指向的地址中,这个地址其实就是.got.plt段的一个地址。

第二次调用时就可以直接获取到.got.plt中保存的地址了。

总之,这个设计让人就觉得很完整,有联系,6666666

以上是关于elf文件中的.plt .rel.dyn .rel.plt .got .got.plt的关系的主要内容,如果未能解决你的问题,请参考以下文章

基于Android的ELF PLT/GOT符号重定向过程

基于Android的ELF PLT/GOT符号重定向过程

Elf-Hook持续记录中

Mac OS X 的类似 readelf 的工具? [关闭]

ELF文件认知(二)可重定位目标文件

GOT and PLT for pwning.