【问题标题】:Why there is no 16-bit information in ELF magic number?为什么 ELF 幻数中没有 16 位信息?
【发布时间】:2017-04-19 21:00:53
【问题描述】:

在 ELF-header 中,e_ident[EI_CLASS] 的值可以是 1 或 2,表示 32 位操作系统或 64 位操作系统。但是从历史上我们知道ELF最早出现在1993年发布的Solaris 2.0中。然而,被广泛使用的32位处理器Pentium Pro直到1995年才出现。 那么为什么ELF header中没有16位甚至8位的信息呢?

【问题讨论】:

  • @Someprogrammerdude 谢谢!在奔腾之前,我一直认为人们使用的是 16 位架构。再次感谢!
  • @Someprogrammerdude 你可以回答这个问题;愿意这样做吗?

标签: linux elf magic-numbers


【解决方案1】:

第一个“广泛使用”的 32 位 CPU 是更老的 Intel 80386

然后我们有关于 SUN 及其 SPARC 架构的故事,其时间框架与 386 大致相同。

Solaris 是 SUN 在 1990 年代初期为他们的机器开发的,接近于第一个 64 位系统实际开始出现的时候。

ELF(Executable and Linkable Format 的首字母缩写)是在 1980 年代后期开发的,当时所有主要的 Unix 变体都在纯或混合(想想Motorola 68000)32 位系统上运行。

【讨论】:

    【解决方案2】:

    EI_CLASS 不识别“操作系统”,而是识别内存模型。该设置定义了文件中各种地址信息的编码方式,不一定是目标寄存器的宽度。

    对于 PC CPU,代码加载器在执行 ELF 文件中包含的程序的同一 CPU 上执行,因此EI_CLASS 与代码格式匹配。但是,ELF 文件也可用作可移植代码/调试格式,即使在 8 位和 16 位控制器上也是如此。此外,几乎所有 16 位 CPU 都可以寻址超过 64 KB 的内存,因此对于此类目标(假设存在此类),EI_CLASS 不能设置为 ELFCLASS16

    总而言之,指针有多少位宽无关紧要,只与您可以拥有多少虚拟内存有关。当然,仍然可以通过定义类似ELFCLASS20(16 位 CPU 的常用值,包括 Intel 8086)来使 ELF 文件更紧凑,但是,正如已经说过的那样,32 位架构在 1993 年已经普及,所以没有人费心去定义这样的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-02
      • 2010-10-14
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      • 1970-01-01
      • 2014-03-30
      相关资源
      最近更新 更多