linux - 错误“分段错误(核心转储)”是什么意思?
问题描述
我正在尝试使用汇编程序编码实现一个 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
解决方案
这意味着您试图以不允许的方式访问地址空间。例如:
您可能已尝试写入只读位置
您可能曾尝试从只写位置读取
您可能曾尝试从未设置执行权限的位置执行代码
您可能试图从根本没有映射的地址读取或写入,或者映射了不允许的各种访问
还有其他一些条件会导致此信号跳闸。查看手册页mmap
并mprotect
了解可能的情况。
推荐阅读
- php - 如何在 PHP 中从 CURL 调用 SAS 存储过程?
- c# - 为什么 VS 在代码编译正常时显示缺少命名空间错误?
- c++ - Stroustrup:reserve() 的 C++ 实现
- javafx - 未经修饰的警报不会在请求时关闭
- node.js - 如何使用 ndb 调试 Protractor e2e 测试?
- javascript - 多个翻转框 - 但只翻转点击的那个
- python - 曲面上的 Aruco 标记姿态估计
- javascript - telegraf.js 机器人在组中没有响应
- xml - 从 Visual Studio 导出 WIT xml 失败
- r - 在 read_excel 中保留特定列