可重定位的目标文件phase1.o,在生成执行程序的过程中重定位的方法

可重定位的目标文件phase1.o,在生成执行程序的过程中重定位的方法

gcc -on-pie -fno-PIC main.o phase1.o -o linkbomb1
连接时,在各个.o合并生成了执行程序linkbomb1后,要对linkbomb1进行重定位。

1.查看phase1.o的重定位条目

$readelf -r phase1.o

2.phase1.o中数据节.data的重定位
2.1 查看数据节需要重定位的条目

$readelf -x.rel.data phase1.o
.rel.data
r1=00000000 00000000 01000000 09000000 00000000 00000000
{
offset=0;
type=1; R_X86_64_64
sybmol=9; do_phase
addend=0x0;
}
这个就是void (*phase)()=do_phase; 全局变量phase被初始化为do_phase子程序的起始地址。
而do_phase的地址,只有连接生成执行程序linkbomb1后,各个text合并后,才能确定do_phase的地址,重新对这个变量phase赋初值。

2.2 确定需要重定位的数据位置和长度: 0, 8

$readelf -x.data phase1.o
Hex dump of section ‘.data’:
NOTE: This section has relocations against it

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值