a.out被ELF文件格式取代?

我有几个问题:

  • 为什么a.outELF取代?
  • a.out格式中导致ELF文件格式升级的主要缺陷是什么?
  • 较早的核心转储基于a.out,但是现在它们基于ELF。 ELF提供的各种优势是什么?

Solutions Collecting From Web of "a.out被ELF文件格式取代?"

a.out格式强制共享库占用内存中的固定位置。 如果您想分发a.out共享库,则必须注册其地址空间。 这对性能有好处,但并没有扩展。 亲眼看看它是多么棘手 (linuxjournal)。

相比之下,在ELF中,共享库可以被加载到内存中的任何地方,甚至可能出现在同一台计算机上运行的不同应用程序的不同地址(代码仍然只能在物理内存的一个地方加载)! 为了达到这个目的,在IA-32架构中,必须牺牲一个寄存器(%ebx)。 一个更全面的参考资料显示共享库在ELF中变得更加复杂,但这是编译器端的复杂性,而不是程序员端。

我记得,a.out格式的原始问题之一是它只支持三个部分:文本,数据和bss。 ELF允许任何数量(或至少更多)。 a.out头部格式非常简单,如下所示:

 word <magic> word <text size> word <data size> word <bss size> 

ELF格式相反,有部分标题,名称,大小等。

有更多的部分允许标准部分,但也给我们const部分,构造部分,甚至每个功能一个部分,如果我们想要它。

有一点琐碎–a.out代表汇编器输出,直到今天,gcc将编译C代码,并且默认命名输出文件a.out,除非指定了另一个输出名称,尽管输出文件仍然是ELF。 这是从代码被直接翻译成汇编输出的日子里搁置的……很高兴看到传统的精神生活!

希望这有助于,最好的问候,汤姆。