【问题标题】:Is my understanding on the use of the symbol table and relocation table correct?我对符号表和重定位表的使用理解是否正确?
【发布时间】:2014-11-29 15:43:34
【问题描述】:
我目前很难理解链接/加载概念。
您能否告诉我以下关于符号表和重定位表的使用说明是否正确?
- 在可重定位目标文件中,符号表必须包含从其他目标文件访问/调用的变量和函数的条目。未在目标文件之外使用的变量和函数的列表是可选的。
- 这意味着如果程序只包含一个目标文件,符号表可以省略。
- 在可重定位目标文件中,重定位表包含在加载期间必须更新的汇编代码的所有位置的地址。
- 在不可重定位的目标文件中,可以省略重定位表。但是,必须将对象加载到硬编码到指令中的地址空间中。
感谢您的宝贵时间!
【问题讨论】:
标签:
c
object
symbols
relocation
【解决方案1】:
- 第一部分(大约只需要
extern 元素)是正确的。然而,关于由单个目标文件组成的程序的推论并不完全正确:必须至少有一个符号可供外部使用 - 即入口点(C 程序的 main 函数)必须是可见的。
- 由于
address 在这里在不同的上下文中表示不同的东西,因此最好在文件中讨论偏移量,而不是地址。重定位表保存文件加载到内存时需要更新的所有内容的偏移量,以及需要写入这些偏移量的信息。
- 不可重定位文件需要加载到特定地址。不需要重定位表。