4

我目前很难理解链接/加载概念。

您能否告诉我以下关于使用符号表和重定位表的陈述是否正确?

  1. 在可重定位目标文件中,符号表必须包含从其他目标文件访问/调用的变量和函数的条目。未在目标文件之外使用的变量和函数的列表是可选的。
    • 这意味着如果程序仅包含一个目标文件,则可以省略符号表。
  2. 在可重定位目标文件中,重定位表保存了在加载期间必须更新的汇编代码的所有位置的地址。
  3. 在不可重定位的目标文件中,可以省略重定位表。但是,必须将对象加载到硬编码到指令中的地址空间中。

谢谢你的时间!

4

1 回答 1

4
  1. 第一部分(大约只extern需要元素)是正确的。然而,关于由单个目标文件组成的程序的推论并不完全正确:必须至少有一个符号可供外部使用——即入口点(mainC 程序的函数)必须是可见的。
  2. 由于address在这里在不同的上下文中意味着不同的东西,因此最好在文件中讨论偏移量,而不是地址。重定位表保存文件加载到内存时需要更新的所有内容的偏移量,以及需要写入这些偏移量的信息。
  3. 不可重定位文件需要加载到特定地址。不需要重定位表。
于 2014-10-05T00:06:29.407 回答