我在尝试理解 ELF(可执行和链接格式)时遇到了这个问题。
我遵循的步骤
- 编写了一个简单的应用程序。
main.c
包含int main(int argc, char **argv){ return 0;}
- 使用 gcc 在 linux 环境中编译。 (在英特尔笔记本电脑上完成)
最简单的命令可能
gcc main.c
- 现在当我运行
a.out
时,它运行没有任何问题。所以构建没问题。 - 我使用
readelf
工具检索 ELF 信息,其中 machine 字段为Advanced Micro Devices X86-64
。 这部分让我感到困惑。
所以我检查了 a.out
的文件头,它符合 ELF-64 规范(Value 64 - EM_X86_64
)。
谁愿意解释一下,为什么在 Linux 上以 64 位模式构建的可执行文件将机器类型显示为 AMD x86 64
?
最佳答案
x86_64 平台被称为 AMD64 AMD 推出时的平台。最初,还不清楚英特尔是否会支持它。
您注意到在 i386 不复存在多久后,许多软件都具有架构标签 i386
吗?这是因为 i386 CPU 引入了软件使用的指令集。同样,AMD 引入了您的程序使用的指令集,因此它有一个架构标签,反射(reflect)了第一个支持其指令集的 CPU。 (现代 32 位代码仍然经常被标记为 i686
,它指的是大约 1995 年的 Pentium Pro。)
关于linux - 为什么在 Linux 上以 64 位模式构建的可执行文件显示机器类型为 AMD x86 64?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9295807/