Откройте файл из аргумента командной строки
Я пытаюсь создать программу сборки, которая создает файл, указанный в командной строке (argv [1]). Он отлично работает, если строка уже сохранена, но если я запустил ее как есть, а имя_файла не было перемещено в rbx, он прекрасно работает.
section .text
global _start
_start:
; Equivalent to mov rsp, [rsp+8]
pop rbx; argc
pop rbx; argv[0]
pop rbx; argv[1]
mov rax, 8
;mov rbx, file_name ; Commented out
mov rcx, 0744
syscall
; Exit
mov rax, 1
mov rbx, 0
syscall
section .data
file_name db'file.txt'
Я также попробовал это изВот и теперь я понимаю, что это прыжок на выход, хотя argc равен 2, но, тем не менее, я попытался безрезультатно:
pop rcx
cmp rcx, 2
jne exit
add rsp, 8
pop rbx
mov rax, 8
mov rcx, 0744
syscall
Как я могу это исправить?
Изменить 1:
Перешел на 64-битные системные вызовы. Вот моя привет мировая практика:
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, string
mov rdx, strlen
syscall
; Exit
mov rax, 60
mov rbx, 0
syscall
section .data
string db 'Hello, World!', 10
strlen equ $ - string
Теперь с созданием файла:
section .text
global _start
_start:
mov rax, 85
mov rdi, file_name
mov rsi, 0744
syscall
; Exit
mov rax, 60
mov rbx, 0
syscall
section .data
file_name db 'File.txt'
И, наконец, с аргументами файла:
section .text
global _start
_start:
pop rbx
pop rbx
pop rbx
mov rdi, rbx
mov rax, 85
mov rsi, 0744
syscall
; Exit
mov rax, 60
mov rbx, 0
syscall