gpt4 book ai didi

c - 检测到堆栈粉碎

转载 作者:太空狗 更新时间:2023-10-29 16:13:47 24 4
gpt4 key购买 nike

我正在执行我的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com