Segfault в простой программе: открыть, закрыть файл в сборке, x86_64 - PullRequest
0 голосов
/ 05 марта 2019

Итак, у меня есть файл file1 в том же каталоге, что и программа.Я компилирую его с

nasm -f elf64 -o prog.o prog.asm
ld --fatal-warnings -o prog prog.o

и запускаю с ./prog file1, но это дает мне SegFault

global _start

exit_error:
  mov rax, 60
  mov rdi, 1
  syscall

exit_ok:
  mov rax, 60
  syscall

_start:
  cmp qword [rsp], 2
  jne exit_error
  mov rdi, [rsp + 16]

  call open_file

  call close_file

  mov rdi, 0
  jmp exit_ok

open_file:
  mov rax, 2
  mov rsi, 0
  syscall
  mov rdi, [rax]
  ret

close_file:
  mov rax, 0
  syscall
  ret

Я также попытался запустить его с: strace ./prog file1 и получаю:

execve("./prog", ["./prog", "file1"], 0x7ffc8edac5e8 /* 63 vars */) = 0
open("file1", O_RDONLY)                 = 3
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x3} ---
+++ killed by SIGSEGV (core dumped) +++
Segmentation fault (core dumped)

Может кто-нибудь объяснить мне, почему т не работает?

...