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