在Termux(Android 11)中用Yasm运行.s汇编文件遇问题求助
解决Termux下ARM架构汇编编译运行问题
问题原因拆解
- 权限拒绝问题:
yasm file.s -o run生成的文件默认没有可执行权限,再加上目标格式不匹配,系统无法识别为可执行文件,所以报权限错误。 - 格式错误问题:三星Exynos 7904是ARM64(aarch64)架构,你用
-felf64指定的是x86_64架构的目标文件格式,和当前CPU完全不兼容,链接器自然报错。
正确编译运行步骤
针对Termux的ARM64环境,按以下操作执行:
1. 安装必要工具(如果没装的话)
pkg install yasm binutils
2. 编译ARM64格式的目标文件
用yasm指定ARM64的输出格式:
yasm -faarch64 file.s -o file.o
3. 链接生成可执行文件
ld file.o -o run
4. 添加权限并运行
给生成的程序加上执行权限,再运行:
chmod +x run ./run
额外提醒
你写的汇编代码必须是ARM64架构的指令集,不能用x86的汇编代码——比如ARM64的入口点是_start,寄存器用x0-x30而非rax/rbx这类,系统调用号也和x86不一样,写错指令的话就算编译通过也会运行出错。
内容的提问来源于stack exchange,提问作者Nico
相关产品推荐
相关产品推荐

