在创建最终图像之前解析目标文件中的重定位时,链接器完全采取了哪些步骤?更具体地说,链接器如何处理已经存储在重定位站点的值?它是否总是将它添加到最终VA/RVA中,还是有时会忽略它(例如某些重定位类型)?重定位如何在COFF对象(不是图像)文件中工作
我找不到在MS PE/COFF Specfication明确的解释,以及谷歌搜索和试验一段时间后,所有我能找到的是:
- 在MS COFF规范,章5.6.2“基地重新定位类型“,据说”基地重新定位将差异的所有32位应用于偏移处的32位字段“,这意味着重定位应该考虑已经存储在指定偏移处的任何地址。但是,第5.6章(.reloc章节)只与图像文件相关,而不是目标文件。
- 当打印重定位表时,dumpbin实用程序会添加名为“应用于”的列,这似乎总是(无论重定位类型)包含存储在重定位站点的值。
- Relocation Directives chapter in the DJGPP COFF Specification明确指出,当前存储在该位置的值应该添加到重定位表条目指向的符号的地址。
您能否指出任何解释链接器如何处理重定位的相关文档?
对于目标文件4.2“COFF Relocations”而不是仅适用于图像文件的5.6.2部分,是不是合适的部分? – legalize
它应该是,但是4.2节并没有解释如果重定位站点的值不同于0中存储的值,这实际上很常见,并且可以使用dumpbin轻松查看。 – user2625389