Открытие и запись в файл в сборке на mac


Я изучаю 32-битную сборку на mac, и я пытался написать файл на своем рабочем столе. Я использовал этот код:

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

Файл пуст, и он уже существует на моем рабочем столе. После запуска он не изменяет файл вообще.

Что-нибудь не так с моим кодом?

1 2

1 ответ:

На MAC OS int 0x80 открытый системный вызов:

5 все AUE_OPEN_RWTC { инт открыть(user_addr_t путь, флаги инт, инт. режим); }

Ваш код передает 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