我正在尝试编写一个编译器,但是我并不擅长。它可以编译/汇编,没有任何错误,但是在运行时却给我带来了段错误。
这是我如何汇编汇编源代码(在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
答案 0 :(得分:3)
在ret
之后返回call main
之后,控制结束于call
之后的指令,该指令恰好又是main
的开头。在mov
指令第二次运行之后,下一个再次是ret
,但是现在没有相应的call
,导致指令指针指向刚碰到的下一个字节。堆。几乎可以肯定,这将不会是可执行内存,因此在尝试在其中执行时会发生段错误。