gpt4 book ai didi

assembly - 为什么从 _start 段错误返回?

转载 作者:太空宇宙 更新时间:2023-11-04 12:43:17 27 4
gpt4 key购买 nike

我尝试将代码不放在主函数中,而是直接放在 _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

但为什么弹出堆栈帧的这种尾声和指向前一帧基的设置基帧指针会导致段错误?

确实,进行退出系统调用可以优雅地退出。

最佳答案

根据 ABI 1 _start 入口处的栈是

Stack at entry on _start

没有“返回地址”。
退出进程的唯一方法是通过 SYS_EXIT

xorl %edi, %edi   ;Error code
movl $60, %eax ;SYS_EXIT
syscall

1 3.4.1 初始堆栈和寄存器状态部分。

关于assembly - 为什么从 _start 段错误返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39553289/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com