Открытие и запись в файл в сборке на 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 ответ:
На 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