在创建最终图像之前,链接器在解析目标文件中的重定位时会采取哪些步骤?更具体地说,链接器如何处理已经存储在重定位站点的值?它总是将它添加到最终的VA/RVA中,还是有时会被忽略(例如某些重定位类型)?
我在MS PE/COFF Specfication中找不到清晰的解释,经过谷歌搜索和实验一段时间后,我所能发现的是:
- 在MS COFF规范的第5.6.2节"基本重定位类型"中,据说"基址重定位将所有32位差异应用于偏移量的32位字段",我猜这意味着重定位应该采取考虑已经存储在指定偏移处的任何地址.但是,第5.6章(.reloc部分)仅与图像文件有关,而与目标文件无关.
- dumpbin实用程序在打印重定位表时添加名为"应用于"的列,该列似乎始终(无论重定位类型)是否包含存储在重定位站点的值.
- DJGPP COFF规范中的重定位指令章节明确指出,当前存储在该位置的值应该添加到重定位表条目指向的符号的地址中.
您能否指出我的任何(相关)文档,它解释了链接器如何处理重定位?