为什么 aarch64 ELF 可执行文件可以在 x86_64 机器上运行?

为什么 aarch64 ELF 可执行文件可以在 x86_64 机器上运行?

我在 Raspberry Pi 3 上编译了一个简单的“Hello World”C 程序,然后将其传输到 AMD64 笔记本电脑上。出于好奇,我执行了它,尽管我没有想到它会运行,但它会运行:

$ uname -a
Linux 15ud490-gx76k 6.5.0-25-generic #25~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Feb 20 16:09:15 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
$ file hello64
hello64: ELF 64-bit LSB executable, ARM aarch64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=486ee1cde035cd704b49c037a32fb77239b6a1c2, for GNU/Linux 3.7.0, not stripped
$ ./hello64
Hello World!

这样的话,怎么执行呢?

QEMU 用户仿真已安装,但我不知道它是否在其中发挥作用。

答案1

QEMU 用户模拟正是二进制文件运行的原因:在您的系统上,您安装的 QEMU 相关软件包之一可确保 QEMU 注册为它可以模拟的所有架构的处理程序,然后内核将二进制文件传递给它。只要您拥有所需的库(如果有),二进制文件就会运行;由于您的二进制文件是静态链接的,因此它没有外部依赖项。

为什么我的 BusyBox 静态编译的 ARM 二进制文件可以在我的 x86_64 PC 上运行?Mono 有何神奇之处?了解详情。

相关内容