segment readable writeable executable
; Создаем файл
mov rax, 2
mov rdi, filename_path mov rsi, O_CREATE
mov rdx, 0777o
syscall
; Записываем в файл
mov rdi, rax
mov rax, 1 mov rsi, buf
mov rdx, size syscall
; Закрываем файл
mov rdi, rax mov rax, 3
syscall ; Завершение программы
mov rax, 60
mov rdi, 0
syscall
segment readable writeable
filename_path db '/home/vasutinvaceslav13/mylikedfile.txt',0
buf db "Welcome to 64 bit Linux! What's up?",0
size = $-buf
O_CREATE = 0100
Кажется, ты забыл вызвать syscall. Да и вообще всё напутал
Да это же параллельное выполнение кода! Вон там syscall и несколько mov справа. И нет, так оно тоже работать не будет, rax к моменту close() уже испорчен.
Тогда в стэк, или в память сохраняй. Создай переменную dq, туда записывай RAX, и обращайся к нему, когда будешь записывать его, для вызова close
А ещё лучше бы поправить O_CREATE на 100o, ну или на человеческий 0x40
Почему все напутал? Положил в rax вызов, в остальные положил аргументы - вызвал; и так далее
Открыл файл, записал, закрыл.
Стоп, а зачем тебе вообще O_CREATE?
Ну да, открыл, записал, а закрыл уже какой-то 0x00 дескриптор
Вообще, rdi не должен меняться после вызова, так что в этом конкретном случае можно один раз в mov rdi,rax после open() и всё.
Мне в rsi положить? А rsi в rdx?
Боже, а эти-то тут каким местом?!
Так как rax и rdi заняты
Обсуждают сегодня