可重定位目标文件和可执行目标文件的主要差别是什么?

可重定位目标文件和可执行目标文件的主要差别是什么?
【正确答案】:可执行目标文件由链接器将若干个相互关联的可重定位目标文件组合起来而生成。可重定位文件中的代码和数据的地址是相对于起始地址0而得到的,可执行文件中代码和数据的地址则按照操作系统规定的存储器映像来确定起始地址,并且可重定位文件中代码和数据的地址将会被修改,使得它们被重定位到运行时的虚拟存储空间中相应地址处。可执行目标文件格式与可重定位目标文件格式类似,例如,这两种格式中ELF头的数据结构一样,.text节、.rodata节和.data节中除了有些重定位地址不同以外,大部分都类似。相比于ELF可重定位目标文件,可执行目标文件的不同之处表现在以下几个方面:
①ELF头中字段e_entry给出系统将控制权转移到的起始的虚拟地址(入口点),即执行程序时第一条指令的地址,而在可重定位文件中,此字段为0。
②多了一个.init节,其中定义了一个_init函数,用于可执行目标文件开始执行时的初始化工作。
③少了两个.rel节,因为可执行目标文件中的指令和数据已被重定位,故可去掉用于重定位的节。
④多了一个程序头表,也称段头表(segment header table),可执行文件中的节与虚拟空间中的存储段之间的映射关系。