为什么我会从以下代码中获得分段错误?
.text
.globl start
start:
pushq %rbp
movq %rsp, %rbp
movq $0xBEEFF00DBEEFF00D, %rax
pushq %rax
movq $0xF00DBEEFF00DBEEF, %rax
pushq %rax
movq %rbp, %rsp
popq %rbp
ret
错误:
Segmentation fault: 11
答案 0 :(得分:4)
如果start
是您的程序的入口点,则不能ret
到OS;你应该_exit
。
在您可能正在使用的Linux(x86-64)上,执行此操作而不是ret
:
movq $60, %rax # %rax = _exit() system call
xorq %rdi, %rdi # %rdi = 0 normal program return code
syscall