簡體   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