为什么linux上以64位模式构建的可执行文件显示机器类型为AMD x86 64?

时间:2012-02-15 15:07:08

标签: linux makefile elf

我在尝试理解ELF(可执行文件和链接格式)时遇到了这个问题。

我遵循的步骤

  1. 写了一个简单的应用程序。 main.c包含 int main(int argc, char **argv){ return 0;}
  2. 使用gcc在linux环境下编译。 (在intel笔记本电脑上完成) 最简单的命令 gcc main.c
  3. 现在,当我运行a.out时,它运行没有任何问题。所以构建很好。
  4. 我使用readelf工具检索ELF信息,其中机器字段的位置为Advanced Micro Devices X86-64。 这部分困惑了我。
  5. 所以我检查了a.out的文件头,它符合ELF-64规范(Value 64 - EM_X86_64)。

    有人愿意解释一下,为什么在Linux上以64位模式构建的可执行文件将机器类型显示为AMD x86 64

3 个答案:

答案 0 :(得分:7)

当AMD推出时,x86_64平台被称为AMD64平台。最初,英特尔支持它还远未明确。

你注意到i386不复存在多久后,很多软件都有架构标签i386?这是因为i386 CPU引入了软件使用的指令集。同样,AMD引入了程序使用的指令集,因此它有一个体系结构标记,反映了支持其指令集的第一个CPU。 (现代32位代码仍经常被标记为i686,这是指Pentium Pro,大约在1995年。)

答案 1 :(得分:3)

有一段时间,IA-64(英特尔架构64位)或安腾芯片是英特尔的64位产品,而奔腾级芯片则是IA-32芯片。 IA-64芯片指令集与奔腾代码集完全不同,人们没有大量提取它。与此同时,AMD推出了针对奔腾代码集的64位扩展 - 这得到了很多支持。过了一段时间,英特尔屈服于不可避免的事情,并制造了自己的芯片,与AMD x86 / 64芯片兼容。但正是AMD指定了这种架构,因此它得名于此。

答案 2 :(得分:0)

  

为什么可执行文件...将机器类型显示为AMD x86 64?

因为文件使用的ELF机器代码是由AMD注册的。有正式的注册代码列表:http://www.sco.com/developers/gabi/latest/ch4.eheader.html(第二页的表格):

e_machine
This member's value specifies the required architecture for an individual file. 

Name    Value   Meaning
EM_NONE 0   No machine
...
EM_X86_64   62  AMD x86-64 architecture