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