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