【问题标题】:Difference between different binary formats不同二进制格式之间的区别
【发布时间】:2015-03-13 00:14:50
【问题描述】:

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

它们必须是一系列指令及其参数(由 ISA 指定)。所以只要处理器相同,就可以在电脑之间使用相同的二进制(目前需要兼容ABI)。

【问题讨论】:

  • 在发布此问题之前您是否进行过任何研究?
  • @OliverCharlesworth 是的,但没有人解释这么多格式的必要性。
  • “它们为什么存在?” - 同样的原因有不止一种编程语言、不止一种操作系统或不止一种编译器。
  • 请注意,第一个 MS-DOS 二进制文件(.com 文件)只是由 ISA 指定的指令序列及其参数。您可能想研究下一种格式(.exe 文件,“MS-DOS MZ 格式”)提供的功能。
  • 请向我解释如何使用原始机器代码块实现共享库、导入、导出。请详细说明操作系统如何知道将代码标记为可执行文件,并将某些数据区域标记为只读,并带有原始机器代码块。请定义 ABI,当您只有一团机器代码时。

标签: c linux operating-system


【解决方案1】:

简答:历史和发展。请参阅 Wikipedia 上的 feature comparison

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

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

【讨论】:

    猜你喜欢
    • 2011-05-29
    • 2015-01-25
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 2017-08-05
    • 2016-02-22
    • 2014-03-01
    • 2021-12-20
    相关资源
    最近更新 更多