Ошибка сегментации носа
Извините, я новичок с ассемблерным кодом. Я кодирую эту строку
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