不同二进制格式之间的区别

时间:2015-03-13 00:14:50

标签: c linux operating-system

COFF,ELF,a.out等二进制格式有什么区别,为什么存在这么多不同的格式呢?

它们必须是一系列指令及其参数(由ISA指定)。因此,只要处理器相同,您就可以在计算机之间使用相同的二进制文件(当前需要兼容ABI)。

1 个答案:

答案 0 :(得分:1)

简短回答:历史与发展。请参阅维基百科的feature comparison

更好的答案:你的假设是错误的。绝对不仅仅是代码和初始化变量;需要更广泛的功能。没有通用的可执行格式或最佳可执行格式,因为所需的功能在不同的情况下会有所不同。通常,我们也希望保持向后支持;如果你不需要,为什么要从已知的工作解决方案切换到新工作解决方案呢?因为新的是“普遍的”只是愚蠢(实际上是愚蠢的,如果你考虑单一文化在真实的,不断变化的世界中的表现有多么糟糕)。

目前,ELF格式是我们最接近“通用”格式的格式,并且被许多当前的操作系统使用 - 尽管Windows和Mac OS都基于历史原因使用自己的格式。 (Windows保留向后可移植性,后来切换到基于COFF的“可移植可执行”格式,COFF本身不便携; Mac OS X使用Mach-O格式,这与其内核直接相关。)