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

Linux下汇编语言如何将数据写入外部文件?含代码示例

Linux下汇编语言写入外部文件的实现

Linux下的汇编程序通过调用**系统调用(syscall)**完成文件操作,核心步骤是「打开/创建文件」→「写入数据」→「关闭文件」。下面以x86_64架构为例,实现将内容"1111 0000"写入目标文件(示例中对应output.s,如需写入其他文件,替换文件名即可)。

完整代码示例

.include "output.s"  ; 按需求包含指定文件

.data
    filename:  db "output.s", 0  ; 目标文件名,以0结尾(C风格字符串)
    content:   db "1111 0000", 0xA  ; 要写入的内容,0xA为可选换行符
    len:       equ $ - content  ; 自动计算内容长度,避免手动统计错误

.text
.global _start

_start:
    ; 1. 打开/创建文件
    mov rax, 2          ; x86_64下sys_open的系统调用号为2
    mov rdi, filename   ; 第一个参数:文件名地址
    mov rsi, 0x211      ; 打开标志:O_WRONLY(0x1) | O_CREAT(0x200) | O_TRUNC(0x100)
    mov rdx, 0644o      ; 文件权限:八进制0644(所有者读写,其他只读)
    syscall             ; 触发系统调用,返回的文件描述符存于rax

    ; 2. 写入数据到文件
    mov rdi, rax        ; 第一个参数:文件描述符(来自open的返回值)
    mov rax, 1          ; x86_64下sys_write的系统调用号为1
    mov rsi, content    ; 第二个参数:待写入数据的内存地址
    mov rdx, len        ; 第三个参数:数据长度
    syscall             ; 触发系统调用

    ; 3. 关闭文件
    mov rax, 3          ; x86_64下sys_close的系统调用号为3
    syscall             ; 触发系统调用

    ; 正常退出程序
    mov rax, 60         ; x86_64下sys_exit的系统调用号为60
    mov rdi, 0          ; 退出码0表示无错误
    syscall

关键细节说明

  • 系统调用号:x86_64架构的系统调用号可通过man syscalls命令查看,不同架构(如i386)的调用号会有差异。
  • 打开标志:0x211组合表示「只写打开,文件不存在则创建,存在则清空内容」;若需要追加内容,可替换为O_WRONLY | O_CREAT | O_APPEND(对应十六进制0x201)。
  • 文件权限:0644o是八进制表示,对应十进制420,符合Linux通用的文件权限规则。
  • 内容长度计算:equ $ - content会自动计算从content标签到当前行的字节数,无需手动统计,减少出错概率。

编译运行方法

使用nasm和ld工具编译运行:

nasm -f elf64 your_program.asm -o your_program.o
ld your_program.o -o your_program
./your_program

执行后查看output.s文件,即可看到写入的"1111 0000"内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:15:49