-bash: ./my_file: 无法执行二进制文件:Exec 格式错误,但我的架构和 elf 匹配

-bash: ./my_file: 无法执行二进制文件:Exec 格式错误,但我的架构和 elf 匹配

我正在尝试在带有ubuntu64-16.04.3-minimal-odroid-c2-20171005操作系统的 Odroid-C2 上运行二进制文件。此文件具有 777 个权限,并且针对 ARM 进行了编译。

# ls -l my_file
-rwxrwxrwx 1 root root 136409 Sep 30 13:17 my_file

#pwd
/home

#file my_file
my_file: ELF 32-bit LSB executable, ARM, version 1, statically linked, not stripped

#uname -a
Linux odroid64 3.14.79-116 #1 SMP PREEMPT Tue Sep 26 01:19:06 BRT 2017 aarch64 aarch64 aarch64 GNU/Linux 

当我尝试运行它(./my_file)时,出现错误: -bash:./my_file:无法执行二进制文件:Exec 格式错误

我知道我的二进制文件是 32 位,而我的 Ubuntu 是 64 位,所以我遵循本教程添加新架构。这没有帮助,发生了相同的错误。

我也搜索了其他解决方案,但似乎此错误的唯一问题是架构不匹配。我很确定这不是我的问题 - elf 是 ARM,Odroid 也是。我以前在这个 Odroid 上运行过类似的二进制文件,所以我现在真的很困惑。

你能帮我找出我的错误吗?

答案1

ELF 32-bit LSB executable, ARM

这是为 32 位 ARM 基础架构环境(当您拥有 32 位 ARM 库时为 armhf、armel、arm64)设计的 32 位 ARM 可执行文件

aarch64

您的架构是 64 位 ARM。具体来说,aarch64芯片仅有的支持 ARMv8 A64 指令集,以及不要支持 A/T32 运行时指令集 像这样的二进制文件需要1

因此系统的抱怨实际上是有效的 - 32 位 ARM 可执行文件对于aarch64无法执行 A/T32 指令集的 64 位环境具有无效的 ELF 标头。


1 假设依据https://en.wikichip.org/wiki/arm/aarch64其中指出:

AArch64 执行状态是 ARMv8 ISA 引入的,用于执行 A64 指令的机器。AArch64 中的机器只能执行 A64 指令,而不能执行 A32 或 T32 指令。

相关内容