我对使用符号表和重定位表的理解是否正确?

时间:2014-10-04 23:55:27

标签: c object symbols relocation

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

您是否可以告诉我以下有关使用符号和重定位表的说明是否正确?

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

1 个答案:

答案 0 :(得分:4)

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