本文主要是介绍重定位偏移量逻辑地址的相互转化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
重定位类型
- Relocation Types重定位类型,指示了链接器如何修复链接地址。
- 重定位类型对应的计算方式可以在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(索引位于重定位条目的符号的值)(也就是,索引的目标的实际地址)
- A This means the addend(加数) used to compute the value of the relocatable field.(加数,如果重定位目标是
隐式加数和显示加数
- 区分:重定位目标如果带有
r_addend
字段,则为显示加数,否则即隐式。 - 隐式加数:隐式加数一般在文件编译汇编,但是不链接。也就是产生.obj文件时,填充到调用语句中。
- 显示加数:显示加数在产生的.obj文件中的调用语句值为0。直接存储在重定位目标结构体
r_addend
字段中。
偏移量计算逻辑地址
address_of_call + offset + length_of_call(调用指令的长度)
这篇关于重定位偏移量逻辑地址的相互转化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!