Android ELF文件中.got .plt .rel.plt .rel.dyn节的区别和联系

以下暂时做为自己的笔记,不做详细介绍。

首先打印出来Section Header:



可以看到上面.got和.plt节的类型是PROGBITS,也就是代码;而.rel.dyn和.rel.plt是REL,它们是Elf32_Rel类型的结构体数据。这就是为什么用ida查看ELF文件的时候只能看见.got和.plt节的内容,而用readelf查看的时候只列出来.rel.dyn和.rel.plt节的内容了。

.rel.dyn节的每个表项对应了除了外部过程调用的符号以外的所有重定位对象,而.rel.plt节的每个表项对应了所有外部过程调用符号的重定位信息。例如你的程序中需要调用一个libc中的函数,假如是strlen,直接调用的话,这个strlen符号就会在.rel.plt节中,如果在你的程序中定义一个函数指针(假如是my_strlen)指向strlen函数,那么my_strlen符号就会在.rel.dyn节中。.rel.dyn和.rel.plt节中每个重定位项记录了符号的符号表索引,重定位的操作地址,重定位类型的信息,.rel.plt中的类型应该都是R_ARM_JUMP_SLOT。

更多信息,以及具体调用一个外部全局函数的时候跳转流程,请看“Android和Linux动态加载机制及PLT/GOT作用介绍”。



参考链接:

1. http://blog.csdn.net/wangbaochu/article/details/41653571

2. http://www.360doc.com/content/10/1103/11/158286_66208047.shtml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值