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