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

时间:2010-02-28 19:45:15

标签: linux unix file-format elf coredump

我有几个问题:

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

3 个答案:

答案 0 :(得分:15)

a.out格式强制共享库占用内存中的固定位置。如果要分发a.out共享库,则必须注册其地址空间。这对性能有好处,但根本没有扩展。亲眼看看how tricky it was(linuxjournal)。

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

答案 1 :(得分:3)

有点琐碎 - a.out代表Assembler OUTput,直到今天,gcc将编译C代码并默认命名输出文件a.out,除非指定了另一个输出名称,尽管输出文件仍然是ELF 。这是从代码直接翻译成汇编程序输出的日子的延续......很高兴看到遗留在精神中的遗产!!

希望这有帮助, 最好的祝福, 汤姆。

答案 2 :(得分:0)

我记得,a.out格式的一个原始问题是它只支持三个部分:text,data和bss。 ELF允许任何数字(或至少更多)。 a.out标头格式非常简单,如:

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

相比之下,ELF格式有章节标题,包括名称,大小等。

如果我们需要,有更多的部分允许标准部分,但也为每个函数提供const部分,构造函数部分,甚至一个部分。