在 mac 上打开并写入程序集中的文件

Open and write to file in assembly on mac

我正在 mac 上学习 32 位汇编,我一直在尝试写入我桌面上的文件。我使用了这段代码:

global _start
section .data
path:   db  "/Users/jackliu/Desktop/test.txt",0
string: db  "hello",0
.len:   equ $ - string

section .text

_start:
mov eax, 5
push dword 2
push dword path
sub esp, 8
int 0x80
add esp, 16
mov ebx, eax

mov eax, 4
push dword string.len
push dword string
push dword ebx
sub esp, 4
int 0x80
add esp, 16

mov eax, 1
push 0
sub esp, 12
int 0x80

该文件是空的,它已经存在于我的桌面上。在 运行 之后,它根本不会更改文件。

我的代码有问题吗?

上MACOSint 0x80打开系统调用是:

5 AUE_OPEN_RWTC ALL { int open(user_addr_t path, int flags, int mode); }

您的代码传递了 2 个参数:

mov eax, 5       ; Open system call = 5
push dword 2     ; Read/Write flag
push dword path  ; Path
sub esp, 8       ; Alignment
int 0x80

由于您打开的是现有文件,请将第三个参数的模式指定为 0。您的代码可能如下所示:

mov eax, 5       ; Open system call = 5
push dword 0     ; Mode = 0
push dword 2     ; Read/Write flag
push dword path  ; Path
sub esp, 4       ; Reserved space for system call
int 0x80