Abrir un archivo desde el argumento de la línea de comando
Estoy tratando de crear un programa de ensamblaje que cree un archivo que se especifica en la línea de comando (argv [1]). Funciona perfectamente bien si la cadena ya está almacenada, pero si la ejecuto como está con el nombre_archivo no movido a rbx, funciona perfectamente bien.
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'
También he intentado esto desdeaquí y ahora me doy cuenta de que esto está saltando para salir a pesar de que argc es 2, pero no obstante lo intenté en vano:
pop rcx
cmp rcx, 2
jne exit
add rsp, 8
pop rbx
mov rax, 8
mov rcx, 0744
syscall
¿Cómo puedo arreglar esto?
Editar 1:
Cambió a syscalls de 64 bits. Aquí está mi práctica hola mundo:
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
Ahora con crear archivo:
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'
Y finalmente con argumentos de archivo:
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