0 assembly stack system-calls exit
我尝试将代码不放在主函数中,而是直接放入_start
:
segment .text
global _start
_start:
push rbp
mov rbp, rsp
; ... program logic ...
leave
ret
Run Code Online (Sandbox Code Playgroud)
编译:
yasm -f elf64 main.s
ld -o main main.o
Run Code Online (Sandbox Code Playgroud)
跑步:
./main
Segmentation fault(core dumped)
Run Code Online (Sandbox Code Playgroud)
我读过,离开是
mov esp,ebp
pop ebp
Run Code Online (Sandbox Code Playgroud)
但是为什么弹出堆栈帧的尾声和指向前一帧基址的设置基址帧指针会导致分段错误?
事实上,进行退出系统调用可以优雅地退出。
根据ABI 1,入口处的堆栈_start
是
没有“返回地址”。
退出进程的唯一方法是通过SYS_EXIT
xorl %edi, %edi ;Error code
movl $60, %eax ;SYS_EXIT
syscall
Run Code Online (Sandbox Code Playgroud)
1第 3.4.1节初始堆栈和寄存器状态。
归档时间: |
|
查看次数: |
1364 次 |
最近记录: |