Ошибка сегментации носа

Извините, я новичок с ассемблерным кодом. Я кодирую эту строку

section .text
     global _start
_start:
     nop
main:
     mov eax, 1
     mov ebx, 2
     xor eax, eax
     ret

Я компилирую с этими командами:

nasm -f elf main.asm
ld -melf_i386 -o main main.o

Когда я запускаю код, Linux выдает ошибку ошибки сегментации (я использую 64-битную Linux Mint Nadia). Почему выдается эта ошибка?

заранее спасибо

1 ответ

Решение

Потому что ret НЕ правильный способ выхода из программы в Linux, Windows или Mac!!!!

Для Windows это ExitProcess а Linux это системный вызов - int 80H с помощью sys_exit, для x86 или используя syscall с помощью 60 для 64Bit или вызов exit из библиотеки C, если вы ссылаетесь на нее.

32-битный Linux

mov     eax, sys_exit ; sys_exit = 1
xor     ebx, ebx
int     80H

64-битный Linux

mov     rax, 60
xor     rdi, rdi
syscall

Windows

push    0
call    ExitProcess

Связывание Windows/Linux с библиотекой C

call    exit
Другие вопросы по тегам