博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Stack OverFlow 栈溢出 - stack smashing detected
阅读量:6908 次
发布时间:2019-06-27

本文共 1385 字,大约阅读时间需要 4 分钟。

hot3.png

在改造一个ota_ts_generator工具时,调试时,发生如下错误:
        ./app
**** stack smashing detected ***: ./app terminated**======= Backtrace: =========**/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x48)Aborted*
Stack Smashing is actually a protection mechanism used by gcc to detect buffer overflow attacks.
#include 
void func(){ char array[10]; gets(array);}int main(int argc, char **argv){ func();}

【注释:】  An input of string greater than size 10 causes corruption of gcc inbuilt protection canary variable followed by SIGABRT to terminate the program.

    You can disable this protection of gcc using option -fno-stack-protector while compiling.

In that case you will get a segmentation fault if you try to access illegal memory location. and of course you can detect the point of overflow say for example using  valgrind.

另外一个例子:

#include 
void fn(void) { char a[100]; char *p = a; bzero(p, 1000); } int main(int argc, char *argv[]) { fn(); return 0; }

这里,数组a就会保存在栈中。当越界访问a[100]及后面的数据时,发生栈溢出,最容易出现的问题是返回指针被修改,进而函数返回时会发现返回的代码段指针错误,提示:“stack smashing detected...":

很多时候,当内存溢出问题不严重时,并不会直接终止我们程序的运行。但是,我们会在调试程序中碰到非常奇怪的问题,比如某一个变量无缘无故变成乱码,不管是在堆中,还是栈中。这便很有可能是指针的错误使用导致的。这种情况出现时,一种调试方法是:使用gdb加载程序,并用watch锁定被改成乱码的变量。这样,如果这个变量被修改,程序便会停下来,我们就可以看到底是哪条语句修改了这个程序。

总结:栈溢出,常常程序abort的地方并不是出问题的地方有,而是离产生问题的地方有一定距离,所以难以调试。

转载于:https://my.oschina.net/mavericsoung/blog/146143

你可能感兴趣的文章
简要总结最近遇到的5个问题
查看>>
中国象棋程序的设计与实现(七)--心得体会和开发日志
查看>>
浅显理解 Python 闭包
查看>>
学习Oracle分析函数(Analytic Functions)
查看>>
openstack学习笔记二 网络设置基础
查看>>
RabbitMQ基础
查看>>
有了安全边界,人工智能才能有序发展
查看>>
Qt在mainwindow下代码添加控件不能显示的问题
查看>>
【cocos2dx】使用VS插件在VS2012/2013上编辑和调试Quick-Cocos2d-x的Lua代码
查看>>
Centos6.0之pptpd+mysql+freeradius实现***帐号统一认证管理
查看>>
Excel导出数据
查看>>
解释Windows7“上帝模式”的原理
查看>>
httpClient4.* 使用教程
查看>>
相对和绝对路径、cd命令、创建和删除目录mkdir/rmdir 、rm命令
查看>>
yum安装配置nagios
查看>>
linux下Bash局部变量及信号捕捉等概念解释
查看>>
HTML5 input placeholder 颜色修改示例css
查看>>
cacti-0.8.8c 下安装realtime插件
查看>>
我的友情链接
查看>>
从0开始学大数据-Java基础开篇(1)
查看>>