2016-01-16 14 views
1

Я изучаю 32-битную сборку на Mac, и я пытался писать файл на своем рабочем столе. Я использовал этот код:Открыть и записать в файл в сборке на 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 

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

Что-то не в порядке с моим кодом?

+0

Вы правы. В os x я читал, что вам нужно выровнять стек до 16-го бита, так что я пытаюсь это сделать. Я просто попробовал это с вашими предложениями, но не повезло. –

+0

Хорошо, теперь он отлично работает. Благодаря! –

ответ

0

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

5 AUE_OPEN_RWTC ALL {INT разомкнут (user_addr_t путь, Int флаги, режим INT); }

Ваш код проходит 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 
+0

Итак, я экспериментировал с этим. Я удалил файл на своем рабочем столе. Затем я заменил 'push dword 0' на' push dword 0666o' и 'push dword 2' с' push dword 0102o'. Предполагается создать файл на моем рабочем столе, а затем написать «привет», но ничего не произошло. Я должен добавить что-нибудь еще? –

+0

@JackLiu: 'push dword 0102o' выглядит неправильно. Вы уверены, что вы не имели в виду 'push dword 0102h' (вместо восьмиугольника?) –

+0

Я просто попробовал. Это не сработало печально. Возможно, я думал, что флаг O_CREAT отличается от Mac, чем на других компьютерах? Однако я не мог найти никаких ресурсов. –