25、共享对象与代码模型:深入解析与实践案例

共享对象与代码模型:深入解析与实践案例

1. .got.plt 节分析

在程序运行过程中,.plt 节的起始地址有着重要作用。它对应着所有 PLT 条目共享的“通用”代码,会将一个 GOT 值压入栈中,并从 GOT 获取动态加载器的地址以进行跳转。通过 objdump 输出的注释可知,最后两个值对应的地址为 0x601008 和 0x601010,这些值存储在 .got.plt 节中,该节是与 PLT 条目相关的 GOT 部分。以下是 .got.plt 节的内容:

Contents of section .got.plt:
0x601000   180e6000 00000000 00000000 00000000
0x601010   00000000 00000000 86054000 00000000
0x601020   96054000 00000000

从地址 0x601018 开始的字节为 86 05 40 00 00 00 00 00 ,由于 Intel 64 采用小端字节序,实际存储的四字为 0x400586,这正是 libfun@plt + 6 的地址,也就是 push 0x0 指令的地址。这表明 GOT 中函数的初始值指向其各自 PLT 条目的第二条指令。

2. 预加载(Preloading)

设置 LD_PRELOAD 变量可以在加载其他库(包括 C 标准库)之前预加载共享对象。该库中的函数在查找时具有优先级,能够覆盖正常加载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值