x86汇编编译的32位程序在WSL1 Kali环境运行Exec format错误如何解决?
问题原因
你的汇编代码本身不存在语法或逻辑错误,报错的根本原因是你当前使用的WSL1环境不支持运行32位ELF可执行文件。
WSL1的底层实现是Windows内核提供的Linux系统调用兼容层,并非完整的Linux内核虚拟化,因此缺失了32位程序的加载、运行支持,即便宿主x86_64硬件本身支持32位指令集,也无法正常运行32位编译的程序。
解决方案
有两种可选用的解决方式:
方案1:将Kali发行版从WSL1升级为WSL2(推荐,可兼容32位程序运行需求)
操作步骤:
- 打开Windows端具有管理员权限的PowerShell终端
- 执行转换命令:
wsl --set-version kali-linux 2 - 等待数分钟完成磁盘镜像转换,重启WSL环境后即可正常运行你编译的32位hello程序
方案2:编译64位版本的汇编程序,可直接在WSL1环境运行
修改汇编代码为x86_64架构适配版本,代码如下:
section .text global _start _start: mov rax, 1 mov rdi, 1 mov rsi, msg mov rdx, len syscall mov rax, 60 mov rdi, 0 syscall section .data msg db 'Hello, world!', 0xa len equ $ - msg
执行对应编译、链接命令:
nasm -f elf64 hello.asm -o hello.o ld hello.o -o hello
运行./hello即可正常输出Hello World内容。
内容的提问来源于stack exchange,提问作者Hrithik Raj
相关产品推荐
相关产品推荐

