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

Mac 64位x86_64架构下nasm汇编关闭文件的问题及解决方案

Mac 64位环境NASM汇编实现文件关闭功能问题解决

我在Mac 64位系统下使用NASM汇编实现关闭文件功能时遇到问题,目标是创建文件并写入内容,已确认打开文件的操作逻辑正确,需要执行关闭文件操作才能让创建的文件实际生成,初始代码如下:

global start
; default rel
section .text
    start:
        ;open
        mov rax, 0x2000005
        mov rdi, file     
        mov rsi, 1   
        syscall

        ;close
        mov rax, 0x2000006
        mov rdi, file ; 此处需要替换正确的入参
        syscall

        mov rax, 0x2000001       ; 退出程序
        xor rdi, rdi         
        syscall          

section .data
    
    str: db "Hello world", 0
    strlen: equ $ - str
    file: db "test.txt"
    lenfile: equ $ - file

问题核心

MacOS属于BSD衍生系统,系统调用的返回值默认存在rax寄存器中,open系统调用执行成功后,rax中存储的就是对应文件的文件句柄,关闭文件时需要传入这个句柄,而非文件名指针。

修正方案

基础修正版本

;close
mov rdi, rax ; 前面open调用的返回值存在rax中,就是目标文件句柄,在rax被覆盖前先转移到rdi
mov rax, 0x2000006
syscall

优化可用版本

;close
mov rdi, rax ; 前面open调用的返回值存在rax中,就是目标文件句柄,在rax被覆盖前先转移到rdi
mov rax, 0x2000006
mov rsi, 0x0201
syscall

额外注意事项

最终排查发现如果仅传入文件名仍无法正常生成文件,需要将file对应的字符串修改为目标文件的完整绝对路径,优化版本的代码配合完整路径即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:39:06