我正在尝试创建一个汇编程序,用于创建在命令行(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'
我也从here尝试了这一点,我现在意识到即使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