[英]NASM: segmentation fault(core dumped)
我是组装的新手,我一直在尝试学习随机问题。 我在Linux机器上使用nasm 64位。 我一直在尝试生成斐波那契数列。 但是,当我运行可执行文件时,出现段错误(核心转储)错误。
section .data
input db 2
section .bss
fib resb 128
section .text
_start:
mov rax, 1
mov rcx, 1
mov rdx, fib
mov rdx, 1
inc rdx
mov rbx, 0
call _fibLoop
call _fibPrint
mov rax, 60
mov rdi, 0
syscall
_fibLoop:
mov [rdx], rax
inc rdx
add rcx, rax
push rcx
mov rcx, [rax]
pop rax
inc rbx
cmp rbx, [input]
jne _fibLoop
ret
我知道_fibPrint的调用不是问题,因为它实际上什么也不做。 我认为写入保留内存的方式有缺陷。 但是,我过去也可以类似地执行此操作,因此我错失了什么。
作为初始化的一部分,您具有以下顺序:
mov rdx, fib
mov rdx, 1
inc rdx
这将使rdx
的值为2
,而不是保留数字的缓冲区的偏移量。 然后,在_fibLoop
,使用写入
mov [rdx], rax
这将尝试访问您无法访问的内存,从而导致分段错误。
我认为在mov rdx,fib
之后删除多余的两行将解决该崩溃问题,使您可以继续使用GDB或所需的其他调试器调试其他错误。
(就像_fibLoop
中的inc rdx
仅将指针_fibLoop
1个字节,但是您要进行8个字节的存储。该input
也只有1个字节,但是您也要在那里进行8字节的加载。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.