运行 aarch64 上的 32 位精灵

run 32bit elf on aarch64

我已经在 qemu 64 位 ARM 上安装了 Debian (followed this tutorial)

uname -a

Linux test 4.9.0-7-arm64 #1 SMP Debian 4.9.110-1 (2018-07-05) aarch64 GNU/Linux

我正在尝试 运行 32 位 elf 文件,但有些工作有些不行:

bash: ./file_2: cannot execute binary file: Exec format error

运行ning 文件命令 运行s,我得到:

file_1: ELF 32-bit LSB executable, ARM, EABI4 version 1 (SYSV), statically linked, not stripped

和不 运行 的那个:

file_2: ELF 32-bit LSB executable, ARM, version 1 (ARM), statically linked, stripped

并且都适用于 32 位系统 (armv7l)

唯一的区别是 SYSV/ARM 版本。

有没有不重新编译内核的解决方法?()

正如链接 post 所暗示的,这需要在内核中启用 CONFIG_COMPAT。另一方面,如果您的内核没有它,我会感到惊讶——我从该教程中获得的 Debian 4.9.0-4 内核确实设置了 CONFIG_COMPAT。您可以通过查看位于客户机的 /boot/ 中的配置文件来检查您的内核是否启用了它。如果它丢失了,那么您需要一个新内核,没有其他任何帮助。

但是在你的情况下你确实有 CONFIG_COMPAT,并且一些可执行文件可以工作。能用和不能用的区别在于,能用的是EABI,不能用的是OABI。 OABI 是用于 32 位 Arm Linux 二进制文件的旧的和过时的 ABI("O" 代表 "old",十多年来它一直是一个糟糕的选择......)并且它64 位内核的 CONFIG_COMPAT 不支持。如果你想在 64 位内核下 运行 它们,你需要从源代码重建这些二进制文件作为 EABI 二进制文件。