当我汇编以下汇编代码时,出现错误 Segmentation fault (core dumped)
section .text
global _start
_start:
mov eax, 8
我的Makefile如下
all:
nasm -f elf64 -o asm.o asm.s
ld asm.o -o asm
rm asm.o
我不知道是什么问题。
我正在运行 64 位 Ubuntu。
最佳答案
CPU 执行程序,找到 mov eax, 8
指令,执行它……然后呢?目标文件中没有更多指令,但没有人告诉 CPU!它会执行接下来的任何操作,可能没有有效指令,这会导致段错误,就像@MichaelPetch 所说的那样。
IMO 最简单的解决方案是使用包装器,它负责初始化和清理您的程序,例如 GCC。只需将 mov eax, 8
放入 main
函数中,您可能熟悉 C 语言。
修改源文件如下:
section .text
global main
main:
mov eax, 8
ret
(main
是一个函数,所以你需要 ret
指令从它返回。)
并使用以下脚本:
nasm -f elf64 -o asm.o asm.s
gcc asm.o -o asm
rm asm.o
关于linux - 不执行任何操作的简单 _start 末尾的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39559371/