分段故障:11组装

时间:2013-01-25 17:07:35

标签: assembly

为什么我会从以下代码中获得分段错误?

.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

1 个答案:

答案 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