在 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
我正在 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