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

ARM Mac(M2)下Hello World汇编程序运行失败求助

问题根源与修复方案

核心问题分析

  1. 系统调用号错误:macOS ARM64的系统调用号和Linux ARM64不同,所有系统调用都需要加上0x2000000前缀。你代码里用的4(write)和1(exit)是Linux的系统调用号,在macOS上会触发非法调用,导致进程被终止。
  2. 写入长度参数错误:"Hello\n"的实际字节数是6(H、e、l、l、o、换行符),但你给X2赋值了13,这会让write系统调用试图读取超出数据段的内存,触发内存保护机制,进程被系统杀死(错误码137通常对应内存访问违规)。
  3. 反汇编异常的关联问题:错误的内存访问和非法系统调用会导致Mach-O文件的加载逻辑异常,进而出现LC_THREAD.UNKNOWN_ARCHITECTURE.0这类异常段标识。

修正后的汇编代码

.global start
    .align 2

start:
    mov     X0, #1                  // 标准输出文件描述符
    adr     X1, hello               // 字符串地址
    mov     X2, #6                  // "Hello\n"的字节数
    mov     X16, #0x2000004         // macOS ARM64的write系统调用号
    svc     0                       // 触发系统调用

    mov     X0, #0                  // exit返回码
    mov     X16, #0x2000001         // macOS ARM64的exit系统调用号
    svc     0

hello:
    .ascii  "Hello\n"

编译与运行验证

  1. 编译命令保持不变:
    clang hello.s -nostdlib -static
    
  2. 运行生成的a.out,会正常输出Hello并换行。
  3. 用objdump检查时,hello段的反汇编会恢复正常,也不会再出现LC_THREAD.UNKNOWN_ARCHITECTURE.0的异常标识。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:20:35