Ich habe versucht, Code nicht in der Hauptfunktion zu setzen, sondern direkt in _start
:Warum wird von _start segfault zurückgegeben?
segment .text
global _start
_start:
push rbp
mov rbp, rsp
; ... program logic ...
leave
ret
Compile:
yasm -f elf64 main.s
ld -o main main.o
Run:
./main
Segmentation fault(core dumped)
ich lesen, lassen ist
mov esp,ebp
pop ebp
Aber warum ist ein solcher Epilog zum Pop-Stack-Frame und der Zeiger zum Basis-Frame auf die Basis eines vorherigen Frames zu einem Segmentierungsfehler?
In der Tat wird ein Exit-System-Aufruf ordnungsgemäß beendet.
'_start' wird nicht vom Kernel aufgerufen, Sie können nicht von ihm zurückkehren. –
Könnten Sie bitte mehr ausarbeiten? Ich dachte, es sei Routine. Wie sollte man von dort richtig "zurückkommen"? Über den Exit-Systemanruf?Schreibe als Antwort. –