You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSL2环境下yasm汇编代码编译运行出现段错误,如何排查原因?

问题原因

  • 64位Linux环境下的系统调用号和32位不同:你使用elf64格式生成64位程序,_exit系统调用的正确调用号是60,而非32位场景下的1。
  • 未完成系统调用的完整流程:你仅设置了调用号寄存器的值,既没有设置_exit需要的退出状态参数(需要存入rdi寄存器),也没有执行触发系统调用的syscall指令。
  • CPU执行流失控:执行完mov eax,1之后,没有指令让进程退出,CPU会继续读取后续内存的内容当做指令执行,这部分内存不属于程序合法的可执行地址空间,直接触发段错误。

修复后的代码

segment .text
global _start
_start:
    mov rax, 60  ; 64位Linux _exit系统调用号
    mov rdi, 0   ; 退出状态码为0表示正常退出
    syscall      ; 触发系统调用

编译运行验证

使用你原有的编译链接命令即可正常执行,不会再触发段错误:

yasm -f elf64 -g dwarf2 -l task1.lst task1.asm
ld -o task1 task1.o
./task1

执行后无输出,进程正常退出,你可以用echo $?查看退出状态码为0,符合预期。

内容的提问来源于stack exchange,提问作者NullPointer7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 14:09:03