2014-10-04 81 views
4

我目前很难理解链接/加载的概念。我对使用符号表和重定位表的理解是否正确?

您能否告诉我下列关于使用符号和重定位表的语句是否正确?

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

谢谢你的时间!

回答

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