我在尝试理解ELF(可执行文件和链接格式)时遇到了这个问题。
我遵循的步骤
main.c
包含
int main(int argc, char **argv){ return 0;}
gcc main.c
a.out
时,它运行没有任何问题。所以构建很好。readelf
工具检索ELF信息,其中机器字段的位置为Advanced Micro Devices X86-64
。
这部分困惑了我。所以我检查了a.out
的文件头,它符合ELF-64规范(Value 64 - EM_X86_64
)。
有人愿意解释一下,为什么在Linux上以64位模式构建的可执行文件将机器类型显示为AMD x86 64
?
答案 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