2017-01-04 4 views
-2

Я пытаюсь написать простой код в сборке (NASM 2, Linux) для создания текстового файла и записи чего-то в него. Но при запуске нижеприведенного кода я обнаружил, что имя файла не так, как я упоминал в коде, оно конкатенировано с содержимым файла. то естьОшибка во время управления файлами в сборке

Он генерирует файл с именем file.txtHello World, где Hello World - это содержимое файла.

section .data 
    file_name db 'file.txt' 

    msg  db 'Hello World', 0xa 
    len equ $-msg 

section .bss 
    fd_out resb 1 

section .text 
    global _start   ;must be declared for using gcc 
_start:      ;tell linker entry point 

    ;Create the file 
    mov ebx, file_name 
    mov ecx, 777   ;(read write execute = 111 = 7) by all (owner, group, and others) 
    mov eax, 8    ;system call number (sys_creat) 
    int 0x80    ;call kernel 
    mov [fd_out], byte eax 

    ;Write into the file 
    mov ebx, [fd_out]  ;file descriptor 
    mov ecx, msg   ;message to write 
    mov edx, len   ;number of bytes 
    mov eax, 4    ;system call number (sys_write) 
    int 0x80    ;call kernel 

    ;Close the file 
    mov eax, 6    ;system call number (sys_close) 
    int 0x80    ;call kernel 

    mov eax,1    ;System call number (sys_exit) 
    int 0x80    ;Call kernel 

Я не имею ни малейшего представления, почему это происходит, что

ответ

2

Имя файла должно быть равно нулю состава:

file_name db 'file.txt',0