0

次のコードでセグメンテーション違反が発生するのはなぜですか?

.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
4

1 に答える 1

4

プログラムのエントリポイントである場合、OSstartにアクセスすることはできません。retあなたがすべき_exitです。

おそらく使用しているLinux(x86-64)では、次の代わりにこれを実行しますret

    movq $60, %rax # %rax = _exit() system call
    xorq %rdi, %rdi # %rdi = 0 normal program return code
    syscall
于 2013-01-25T17:12:55.203 に答える