组装程序给了我segfault



我正在尝试编写编译器,但我擅长于此。它在没有任何错误的情况下编译/汇编,但在运行时给了我segfault。

这是我组装汇编源代码(在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

retcall main之后返回后,控件最终以call之后的指令结束,这恰好是main的开始。在mov指令进行第二次运行之后,接下来是ret,但是现在没有相应的call,导致指令指针指向堆栈上的下一个字节。几乎可以肯定不会是可执行的内存,因此当试图执行此处时会发生segfault。

相关内容

  • 没有找到相关文章

最新更新