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

标签 linux makefile elf

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

我遵循的步骤

  1. 编写了一个简单的应用程序。 main.c 包含 int main(int argc, char **argv){ return 0;}
  2. 使用 gcc 在 linux 环境中编译。 (在英特尔笔记本电脑上完成) 最简单的命令可能 gcc main.c
  3. 现在当我运行 a.out 时,它运行没有任何问题。所以构建没问题。
  4. 我使用 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/

相关文章:

linux - 纳吉奥斯十一 : Provide Multiple Arguments to a Command

c++ - Make——改变系统范围内的隐式规则

python - 为 python 设置 RPATH 不起作用

c - 如何获得C程序的最低可执行操作码?

linux - 尽管存在必要的权限,但复制时权限被拒绝

c++ - 如何从存储在 char* 指针中的 name 调用 c 函数?

makefile - 如何在 makefile 中向目标添加自定义选项?

object - ELF 和 PE 的基本链接过程如何工作

c - 如何重播多线程应用程序?

c - GCC 输出目标文件与源文件位于同一目录中