PDA

Просмотр полной версии : [asm] Linux sys_open


haZard0us
14.01.2009, 01:30
Ради интереса разбираюсь с писанием под никсы.
код на NASM:


global _start

_start:

pop ebx
pop ebx
pop ebx ;name of file to write

mov eax,5 ;sys_open
mov ecx,100 ;O_CREAT
mov edx,777
int 0x80 ;call kernel

test eax,eax ;valid?
jns file_func

mov ebx,eax ;err num
mov eax,1 ;sys_exit
int 0x80

file_func:
mov ebx,eax ;sys_open descriptor in eax, fd
mov eax,4 ;sys_write

mov ecx,Msg ;*buf
mov edx,5 ;count
int 0x80

mov eax,1
mov ebx,0
int 0x80

section .data

Msg db "Hello", 0ah, 0


Непонимаю, что за косяк с созданием файла. Файл создается, но в него не записывает. Когда вместо создания своего пишу в готовый, все ок.

__mad
14.01.2009, 03:26
проблема тут
mov ecx,100 ;O_CREAT
mov edx,777

константы O_CREAT и другие определяются в восьмеричной системе счисления, а у тебя идёт как десятичная, тоже и с правами на файл.
попробуй заменить на это

mov ecx,101o ;O_CREAT | O_WRONLY
mov edx,777o ;

o, h и b на конце числа означают систему счисления восьмеричная, 16-чная и двоичная соответственно

haZard0us
14.01.2009, 16:37
и правда, спс, за наводку, прошляпил =)
так все ок:

mov ecx,101
mov edx,777q