此问题已在此处有答案:
C — Why «write» can't write in file?(1个答案)
How to read from and write to files using NASM for x86-64bit(2个答案)
16天前关闭
.global _start
.intel_syntax noprefix
.text
_start:
/*
This is writing a file in ASM
*/
mov rax, 2 // open opcode
lea rdi, [rip+file] // const *
mov rsi, 0100 // O_CREAT
mov rdx, 0700 // RWX mode
syscall
mov rdi, rax // copy the fd rax as the last syscall returned that
lea rsi, [rip+message] // message pointer
mov rdx, 13 // message length
mov rax, 1 // write opcode
syscall
/*
This is exiting in ASM
*/
mov rax, 60 // exit opcode
mov rdi, 0 // exit with 0
syscall
.data
message:
.ascii "Hello sailor\n" // normal string
file:
.asciz "main" // null terminated string
使用open创建文件可以按预期工作。
我正在尝试写入我在这里创建的文件。正如你所看到的,我传递了正确的操作码和指向缓冲区的指针以及长度。
我期待的消息是在文件中,当我猫它,但它是空的现在。
另一个注意事项是,当我将文件描述符更改为1或2时,它会按预期打印到终端,所以我很确定字符串不是问题。
1条答案
按热度按时间qpgpyjmq1#
使用
strace ./a.out
可以看到open("main", O_RDONLY|O_CREAT, 0700) = 3
。这意味着我在只读模式下打开文件。为了不这样做,我将该行改为
mov rsi, 0100|02
,这意味着我现在以读写模式打开它。