繁体   English   中英

NASM:分段错误(核心已转储)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM