从命令行参数打开文件

时间:2016-04-01 05:55:45

标签: assembly command-line-arguments

我正在尝试创建一个汇编程序,用于创建在命令行(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

0 个答案:

没有答案
相关问题