Пробовал помещать код не в основную функцию, а прямо в _start
:
segment .text
global _start
_start:
push rbp
mov rbp, rsp
; ... program logic ...
leave
ret
Скомпилировать:
yasm -f elf64 main.s
ld -o main main.o
Бежать:
./main
Segmentation fault(core dumped)
Я читаю, оставь это
mov esp,ebp
pop ebp
Но почему такой эпилог к фрейму всплывающего стека и установленный указатель базового фрейма на базовый предыдущий фрейм приводит к ошибке сегментации?
Действительно, выполнение системного вызова exit завершает работу корректно.
_start
не вызывается ядром, из него нельзя вернуться. - person Margaret Bloom   schedule 18.09.2016