File 使用write()写入文件时出现异常行为

File 使用write()写入文件时出现异常行为,file,assembly,x86,system-calls,write,File,Assembly,X86,System Calls,Write,我试图用createsyscall创建一个文件,用writesyscall将data字符串写入文件,用closesyscall关闭文件,并在Ubuntu 20环境中使用exitsyscall退出 section .text global _start _start: mov ecx, 0777 mov ebx, file_name mov eax, 8 int 0x80 mov [fd], eax mov edx, data_l

我试图用
create
syscall创建一个文件,用
write
syscall将
data
字符串写入文件,用
close
syscall关闭文件,并在
Ubuntu 20
环境中使用
exit
syscall退出

section .text
global  _start

_start:
    mov  ecx, 0777
    mov  ebx, file_name
    mov  eax, 8
    int  0x80

    mov  [fd], eax

    mov  edx, data_len
    mov  ecx, data
    mov  ebx, [fd]
    mov  eax, 4
    int  0x80

    mov  ebx, [fd]
    mov  eax, 6

    mov  eax, 1
    int  0x80




section .data
file_name db 'test.txt'

data db 'write me please!'
data_len equ $-data

section .bss
fd resb 1
在编译和运行上述代码时,使用:

nasm -f elf32 -g test.asm && ld -melf_i386 test.o -o test

它创建了一个名为“test.txt请写我!”的文件writesyscall中的数据溢出是我做错了什么?

NUL终止文件名。而不是
db'test.txt'
write
db'test.txt',0
终止文件名。一些接口使用零字节来确定字符串的结尾。这与问题无关,但另一个应该解决的问题是:fd只分配了1个字节,但它的使用就好像它是4个字节一样。使用
resb 4