1.
生成的每一个目标文件都是由代码段、数据段、BSS段、符号表等section组成的。这些section从目标文件的零偏移地址开始按照顺序依次排放,每个段中的符号相对于零地址的偏移,其实就是每个符号的地址,这样程序中定义的变量、函数名等,都有了一个暂时的地址。
在后续的链接过程中,这些目标文件中的各个section会重新拆分组装,每个section的起始参考地址都会发生变化,导致每个section中定义的函数、全局变量等符号的地址也要随之发生变化,需要重新修改,即重定位。这些函数、全局变量等符号同时被编译工具收集起来,放到一个符号表里,符号表也以section的形式被放置在目标文件中。这些目标文件是不可执行的,它们需要经过链接器链接、重定位后才能运行。