- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在执行我的 a.out 文件。执行后程序运行一段时间然后退出并显示消息:
**** stack smashing detected ***: ./a.out terminated*
*======= Backtrace: =========*
*/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x48)Aborted*
这可能是什么原因,我该如何纠正?
最佳答案
这里的Stack Smashing其实是gcc为了检测buffer overflow错误而采用的一种保护机制造成的。例如在以下代码段中:
#include <stdio.h>
void func()
{
char array[10];
gets(array);
}
int main(int argc, char **argv)
{
func();
}
编译器(在本例中为 gcc)添加了具有已知值的保护变量(称为金丝雀)。大小大于 10 的输入字符串会导致此变量损坏,从而导致 SIGABRT 终止程序。
要深入了解,您可以尝试在编译时使用选项 -fno-stack-protector
禁用 gcc 的这种保护。在那种情况下,您会得到一个不同的错误,很可能是您试图访问非法内存位置时出现的段错误。请注意,-fstack-protector
应始终为发布版本打开,因为它是一项安全功能。
您可以通过使用调试器运行程序来获取有关溢出点的一些信息。 Valgrind 不能很好地处理与堆栈相关的错误,但就像调试器一样,它可以帮助您查明崩溃的位置和原因。
关于c - 检测到堆栈粉碎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1345670/
Video explaining for those who does not understand 此答案未正确回答,请尝试使用其他解决方案来回答(100 Bounty 已过期) 同样的问题,但解释
我有一个使用线程来从文件中读取一些内容的 Activity 。 问题是,如果用户决定在线程运行时旋转屏幕,应用程序就会崩溃。 我知道我可以使用以下方法阻止屏幕旋转: android:screenOri
我正在上计算机安全课并且正在阅读 http://phrack.org/issues/56/8.html .在 bo3.cpp 中,作者创建了他自己的 VTABLE,并覆盖 VPTR 以指向他的 VTA
我们在 Mesos 0.17 上针对 CDH5 运行 Spark 0.9.1。到目前为止,我们继续使用 CDH 系列的“mr1”版本,以便我们可以运行 filecrush。项目在我们的小文件上。由于各
我知道如何删除文件以使它们无法恢复。但是,如何以导致相同结果的方式从 POSIX 环境中的 MySQL 表中删除行?在继续删除该行之前,我目前正在使用与原始数据长度相同的无效字符串重写所有数据。它有效
我有一个如下所示的 XML 文件:
我正在尝试使用 Tween 和平面几何在 Three.js 中创建玻璃 splinter 效果,但有点迷失。网格/几何体不会随补间更新,如果我在第一次渲染之前调用 shatter(),您可以看到补间正
我正在尝试使用我在 XML 中接收的一些日志数据。 在清理数据以使其成为有效的 XML 之后,我在 SQL Server 中获得了 XML 数据包。 (并从 JSON 包装器等中获取其他属性) 但是现
当我将 slim-rails 添加到 Gemfile 并启动我的应用程序时,它崩溃并出现以下错误: /Users/rado/.rbenv/versions/2.3.1/gemsets/project/
我是一名优秀的程序员,十分优秀!