![为什么 aarch64 ELF 可执行文件可以在 x86_64 机器上运行?](https://linux22.com/image/229905/%E4%B8%BA%E4%BB%80%E4%B9%88%20aarch64%20ELF%20%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6%E5%8F%AF%E4%BB%A5%E5%9C%A8%20x86_64%20%E6%9C%BA%E5%99%A8%E4%B8%8A%E8%BF%90%E8%A1%8C%EF%BC%9F.png)
我在 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 有何神奇之处?了解详情。