*** 检测到堆栈粉碎 ***:<未知> 终止中止(核心转储) 错误仅有时发生?

2024-02-02

我正在完成作业(因此我无法发布代码),并且很少出现此运行时错误:

*检测到堆栈粉碎*: 终止 中止(核心转储)

当我再次运行可执行文件后,一切正常。是否有原因导致此错误仅有时出现?作为参考,我试图完成的作业要求我们将文件中的数据加载到两个向量中,并对数据进行二进制和线性搜索,以查看向量 1 中的数据是否出现在向量 2 中。

谢谢你!

编辑:附加信息:当我收到此错误时,输入数据没有任何变化。我可以运行完全相同的可执行文件,一次使用完全相同的输入数据并让它工作,第二次运行它,得到堆栈粉碎错误,然后运行完全相同的东西,并让它再次正常工作。


*** stack smashing detected ***顾名思义,当您粉碎堆栈,这意味着您有缓冲区溢出并且canary被不同的值覆盖。 这是 gcc/g++ 实现的安全机制,用于防止缓冲区溢出漏洞利用-fstack-protector.

要避免此错误,请禁用fstack-protector在 gcc 中编译代码时使用

g++ myProgram.c -o myProgram -fno-stack-protector

Edit 1
但是,禁用堆栈保护将消除此错误,但您可能会得到segmentation fault作为覆盖堆栈的结果。

如果这是一项计算机安全任务,您正在研究缓冲区溢出漏洞,那么您需要弄清楚如何绕过这些安全机制,如果您不熟悉它,那么不知何故,您会溢出缓冲区,并且无需查看代码我就可以'问题到底出在哪里,就不多评论了。

查看向量 1 中的数据是否出现在向量 2 中这确实看起来像是一种缓冲区溢出分配,您需要相互覆盖数组的内容。 事实上,这个错误并不一致,因为有时金丝雀不会被覆盖(程序的良好运行)或被相同的精确值覆盖,有时金丝雀会被不同的值覆盖,从而导致此错误。

您需要配置编译器以使其更容易发生缓冲区溢出。

Edit 2

您的程序行为是随机的,因为您可能没有禁用 ASLR(地址空间布局随机化)。当您编译程序时,编译器 gcc/g++ 会优化可执行文件的安全机制,以防止缓冲区溢出漏洞。

地址空间布局随机化 (ASLR) 是一种计算机安全技术,涉及防止利用内存损坏漏洞。为了防止攻击者可靠地跳转到例如内存中的特定被利用函数,ASLR 随机排列进程关键数据区域的地址空间位置,包括可执行文件的基址以及堆栈、堆的位置和图书馆。

这意味着地址空间分配是随机的,并且向量之间的字节每次都不同。有时溢出的缓冲区不会到达金丝雀,有时会到达。 为了每次都获得一致的行为,您还需要禁用 ASLR。 ASLR 支持由您的操作系统提供。要禁用 ASLR,在 Linux 上可以通过设置禁用它randomize_va_space到 0。可以通过以下方式实现

echo 0 > /proc/sys/kernel/randomize_va_space
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

*** 检测到堆栈粉碎 ***:<未知> 终止中止(核心转储) 错误仅有时发生? 的相关文章

随机推荐

  • 无法将脚本名称识别为 cmdlet、函数等;在简单的脚本中也找不到位置参数

    我正在尝试做我的第一个剧本 要简单地让 PowerShell 提取在记事本中输入的脚本并保存为标题为 test 的 ps1 文件 也尝试过脚本 但知道名称与它无关 Write Host Hello World 在 PowerShell 中我
  • ImageView和设置位置

    我有 imageView 活动 我如何在我的活动中设置此 imageView 的位置 我知道如何在 xml 文件中执行此操作 但我想在活动中执行此操作 因为我有 onTouch 方法 可以在其中获取单击的坐标 并且我想在此坐标中绘制此图像
  • 编辑链接列表中的节点

    我正在创建一个学生列表 链接列表 可以添加 查看和编辑学生信息 我有两个字段 即学生姓名和学生成绩 我在列表中添加新学生 其方式是根据学生的成绩降序排列 我已经完成了添加和查看部分 问题出在编辑部分 因为我需要编辑信息 然后我需要再次对其进
  • 将数据表放入shinyjs模式中

    我将 Shiny 与 Shiny Semantic 库一起使用 以使应用程序看起来不错 使用 showModal modalDialog 的标准 Shiny 弹出消息不适用于 Semantic UI 因此我求助于shinyjs 来使用一些
  • 使用 Javascript 更改 CSS 值

    使用 javascript 设置内联 CSS 值很容易 如果我想改变宽度并且我有这样的html div style width 10px div 我需要做的就是 document getElementById id style width
  • 单选按钮组 XAML

    我在 XAML 中有六个单选按钮 我想创建两个组 WPF 似乎没有单选按钮组元素 那么我该怎么做呢 您必须为元素指定一个 GroupName
  • dockerfile 中的 RUN 命令产生的结果与在容器内手动运行相同命令的结果不同

    我正在创建一个包含 gcc 4 8 5 的 Ubuntu 12 04 docker 映像 我正在获取 gcc 4 8 5 源代码并自己构建它 该容器将在 Ubuntu 18 04 主机上运行 引用底部的代码 如果我不将其放入 dockerf
  • 加密 JWT 安全令牌支持的算法

    我正在尝试使用以下代码片段对我的 JWt 进行签名和编码 var claims new Claim new SomeClaimes var scKey Encoding UTF8 GetBytes SOME KEY var ecKey En
  • 从单个单词中获取所有可能的词性标签

    我目前正在尝试使用 Python 获取单个单词的所有可能的 pos 标签 从传统的词性标注器中 如果您输入单个单词 您只能返回一个标签 有没有办法获得所有的可能性 是否可以在语料库 例如 Brown 中搜索特定单词而不仅仅是类别 亲切的问候
  • 在 Javascript 中处理多个图像后备

    有没有办法在纯 Javascript 或 React 中处理多个图像回退 我知道我们可以处理一张后备图像onError 如果我们想做另一个后备图像怎么办 提前致谢 每次设置导致错误的 src 时 都会调用图像的 onerror 回调 因此
  • 如何使用 Pipe 和 purrr 获取列表名称和切片名称

    我想知道在使用 purrr 的管道操作时如何获取列表名称或组名称作为标志 例如 我想使用传递给 ggsave 函数的每个列表名称的动态参数 require purrr require ggplot2 lst list a1 data fra
  • 在复杂的 React 组件中查找重复的键

    我有一个反应组件 它一次生成许多键 我不确定哪个不是唯一的 错误如下 有什么简单的方法可以帮助调试吗 谢谢 React js 19500 警告 数组或迭代器中的每个子项都应该有一个唯一的 key 属性 检查渲染方法MyGrid 请参阅 ht
  • Java支持关联数组吗? [复制]

    这个问题在这里已经有答案了 我想知道Java中的数组是否可以做这样的事情 int a new int 10 a index0 100 a index1 100 我知道我在其他语言中看到过类似的功能 但我不太熟悉任何细节 只是有一些方法可以将
  • 如何在窗口调整大小时更改高度 div?

    我的网站上有一个 div 应该是窗口的高度 这就是我得到的 document ready function var bodyheight document height sidebar height bodyheight 但是 当调整窗口大
  • 给定 AWS 访问/密钥对,如何检索其 IAM 权限?

    给定一个 AWS 访问密钥和一个 AWS 密钥的输入 我如何使用 AWS 开发工具包查找该账户可以执行哪些权限 我想为客户执行 XYZ 因此客户需要向我提供访问密钥和秘密密钥 以便以编程方式执行 XYZ 但是 在尝试执行任何这些操作之前 我
  • 模仿 msbuild 进程的程序集解析

    我正在编写一个验证工具 用于检查项目中引用的文件的版本 我想使用与 MSBuild 相同的解析过程 例如 Assembly Load 需要完全限定的程序集名称 然而 在项目文件中 我们可能只有 System Xml 之类的东西 MSBuil
  • 如何替换窗口中的文档?

    var newDoc document implementation createHTMLDocument someTitle swap newDoc with document DOMImplementation createHTMLDo
  • Java使用notepad++和nppexec编译运行

    请记住 在 Windows shell 中进行编译是有效的 因此此问题成为 PATH 问题的可能性很小 如果不是零 我花了很多时间研究如何做到这一点 我在网上找到的所有结果都表明你可以这样做 NPP SAVE javac FILE NAME
  • 使用 Elastic Beanstalk 部署 .NET 工作线程应用程序

    我正在使用 AWS 基础设施开发更广泛的 Web 应用程序 它有两个 工作 组件 从 SQS 读取工作并将结果写入 RDS 数据库 其中之一是 Python 我已经在单个 Elastic Beanstalk 实例上使用了它 第二个使用 NE
  • *** 检测到堆栈粉碎 ***:<未知> 终止中止(核心转储) 错误仅有时发生?

    我正在完成作业 因此我无法发布代码 并且很少出现此运行时错误 检测到堆栈粉碎 终止 中止 核心转储 当我再次运行可执行文件后 一切正常 是否有原因导致此错误仅有时出现 作为参考 我试图完成的作业要求我们将文件中的数据加载到两个向量中 并对数