重定位偏移量&逻辑地址的相互转化

重定位类型

  1. Relocation Types重定位类型,指示了链接器如何修复链接地址。
  2. 重定位类型对应的计算方式可以在elf文档中查询到。elf文档

常见的重定位类型偏移量的计算

  • R_386_PC32类型,偏移量计算方式S+A-P
    • A This means the addend(加数) used to compute the value of the relocatable field.(加数,如果重定位目标是Elfxx_Rela,则包含r_addend字段,即显式加数。Elfxx_Rel则是隐式加数。)
    • P This means the place (section offset or address) of the storage unit being relocated(computed using r_offset).(即需要进行重定位的目标的地址[注意,时条目的地址,并不是调用指令的地址]或者段偏移)
    • S This means the value of the symbol whose index resides in the relocation entry(索引位于重定位条目的符号的值)(也就是,索引的目标的实际地址)

隐式加数和显示加数

  1. 区分:重定位目标如果带有r_addend字段,则为显示加数,否则即隐式。
  2. 隐式加数:隐式加数一般在文件编译汇编,但是不链接。也就是产生.obj文件时,填充到调用语句中。
  3. 显示加数:显示加数在产生的.obj文件中的调用语句值为0。直接存储在重定位目标结构体r_addend字段中。

偏移量计算逻辑地址

address_of_call + offset + length_of_call(调用指令的长度)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值