我是靠谱客的博主 谦让鞋垫,最近开发中收集的这篇文章主要介绍elf文件中的.plt .rel.dyn .rel.plt .got .got.plt的关系,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
.plt的作用是一个跳板,保存了某个符号在重定位表中的偏移量(用来第一次查找某个符号)和对应的.got.plt的对应的地址
.rel.dyn重定向表,在程序启动时就需要重定位完成。
.rel.plt保存了重定位表的信息,可以使用lazy的连接方式
.got据说是保存了elf文件本身的各个符号的偏移量,即不要动态链接,未证明
.got.plt保存了重定位地址。
比如printf是一个重定位符号,需要连接该符号时过程是这样:
main函数call .plt段中的一个地址,这里的第一句话就是调转到.got.plt中的保存的printf的地址,如果是第一次,那么保存的地址就是.plt中的下一句话,这个下一句话就是压入这个符号在.rel.plt中的重定位表的偏移量,然后ld程序就会根据重定位表中的信息加上这个偏移量找到这个地址,保存到重定位表所指向的地址中,这个地址其实就是.got.plt段的一个地址。
第二次调用时就可以直接获取到.got.plt中保存的地址了。
总之,这个设计让人就觉得很完整,有联系,6666666
转载于:https://www.cnblogs.com/leo0000/p/5604132.html
最后
以上就是谦让鞋垫为你收集整理的elf文件中的.plt .rel.dyn .rel.plt .got .got.plt的关系的全部内容,希望文章能够帮你解决elf文件中的.plt .rel.dyn .rel.plt .got .got.plt的关系所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复