我试图从一些程序集开始,但我从一开始就遇到了这个错误。以下是详细信息:我自己编写了该文件(在视频之后),因此它不重要:
global _start
_start:
mov eax, 1
mov ebx, 42
int 0x80
非常基本。我组装并链接它(
nasm -f elf32 ex1.asm -o ex1.o
其次是
ld -m elf_i386 ex1.o -o ex1
使用 echo $? 检查每个阶段的退出状态)。它组装和链接良好。文件给出:
ex1: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, not stripped
我的处理器是 64 位 AMD Ryzen 3 2200G,我的 Win10 主机和 Ubuntu 也是 64 位(据我所知,在 64 位环境中运行 32 位二进制文件没问题,对吧?)。我读过很多帖子,他们要么讨论尝试在 32 上运行 64,要么讨论损坏的导入或架构不兼容(例如为 ARM 组装)或更复杂的问题。这非常简单,无论出于何种意图和目的,它都应该简单地运行。但是当我尝试时我得到
-bash: ./ex1: cannot execute binary file: Exec format error
这是通过 Windows 10 应用商店安装的 Ubuntu,64 位。
有什么建议么?
答案1
正如评论中已经指出的,在 Windows Linux 子系统 (WSL) 上运行的 Ubuntu 中上述 nasm 汇编问题的答案是升级到 WSL2。对于遇到该问题的任何人,请注意:
- 如果您的 Windows 10 版本早于 2004 年,您需要先进行更新。
- 您的 Windows 和 WSL 更新需要以管理员身份完成。
我在玩游戏时使用了很多链接 - 无法记住所有链接。然而我最近遇到了:
https://www.youtube.com/watch?v=loC7VfgRT-I
人们可能会找到有用的起点