汇编程序给了我segfault

时间:2019-02-16 16:18:00

标签: assembly segmentation-fault nasm

我正在尝试编写一个编译器,但是我并不擅长。它可以编译/汇编,没有任何错误,但是在运行时却给我带来了段错误。

这是我如何汇编汇编源代码(在ubuntu linux上):

nasm -f elf64 assembly.asm
ld -s -o assembly assembly.o --entry entrypoint
./assembly ; echo $?

这是我的汇编源代码:

global entrypoint
entrypoint:
    call main 
main:
    mov eax, 0
    ret

这就是给我的东西:

Segmentation fault      (core dumped) ./assembly

1 个答案:

答案 0 :(得分:3)

ret之后返回call main之后,控制结束于call之后的指令,该指令恰好又是main的开头。在mov指令第二次运行之后,下一个再次是ret,但是现在没有相应的call,导致指令指针指向刚碰到的下一个字节。堆。几乎可以肯定,这将不会是可执行内存,因此在尝试在其中执行时会发生段错误。