首页 > 解决方案 > 错误“分段错误(核心转储)”是什么意思?

问题描述

我正在尝试使用汇编程序编码实现一个 for 循环,并且在每次迭代中都应该打印寄存器 edi 的值。当我尝试执行我的代码时,我收到错误“分段错误(核心转储)”。有人可以告诉我这个错误是什么意思,我的代码中是否有任何错误?

section .text
         global _start

_start:
        xor edi,edi

loop:    
        add edi,'0'
        
        ;print i
        mov edi,1
        mov esi,1
        mov ecx,[edi]
        mov edx,1
        syscall
        
        sub edi,'0'
        
        inc edi   
        cmp edi,5
        jl loop

标签: linuxassemblyx86segmentation-fault

解决方案


这意味着您试图以不允许的方式访问地址空间。例如:

  • 您可能已尝试写入只读位置

  • 您可能曾尝试从只写位置读取

  • 您可能曾尝试从未设置执行权限的位置执行代码

  • 您可能试图从根本没有映射的地址读取或写入,或者映射了不允许的各种访问

还有其他一些条件会导致此信号跳闸。查看手册页mmapmprotect了解可能的情况。


推荐阅读