него запись:
fasm cfw.asm crf && chmod +x crf && ./crf flat assembler version 1.73.09 (16384 kilobytes memory) 3 passes, 325 bytes. @cloudshell:~/Assem$ cat mylikedfile.txt
Welcome to 64 bit Linux! What's up?
Вот код:
format ELF64 executable
segment readable writeable executable
; Создаем файл
mov rax, 2
mov rdi, filename_path
mov rsi, O_CREATE
mov rdx, 0666o
syscall
; Записываем в файл
mov rdi, rax
mov [fd], rax
mov rax, 1
mov rsi, buf
mov rdx, size
syscall
; Закрываем файл
mov rdi, [fd]
mov rax, 3
syscall
; Завершение программы
mov rax, 60
syscall
segment readable writeable
filename_path db 'mylikedfile.txt',0
buf db "Welcome to 64 bit Linux! What's up?",0,10
fd: dq 0
size = $-filename_path
O_CREATE = 0102o ;0x40
До этого у меня строка была такой:
mov rdx, 0777o .
Оказывается, вполне достаточно было указать лишь биты на чтение/запись, а я посредством 0777о выставил еще и на выполнение, естественно, бит выполнения оказался лишним, и я сделал так:
mov rdx, 0666o
А ты уверен, что работает? Потому что: 1. Ты не указал в режиме открытия доступ на запись 2. Ты используешь устаревший дефайн 0102, и так же он не равен 0x40. 0102 == 0x42 3. На самом деле, это не проблема, но флаги файла тут не причём
Всё, не то запустил. Работает нормально
Обсуждают сегодня