Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   [asm] Linux sys_open (https://forum.antichat.xyz/showthread.php?t=101111)

haZard0us 14.01.2009 01:30

[asm] Linux sys_open
 
Ради интереса разбираюсь с писанием под никсы.
код на 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



Время: 06:02