我正在执行我的a.out文件.执行后程序运行一段时间然后退出并显示以下消息:
**** stack smashing detected ***: ./a.out terminated*
*======= Backtrace: =========*
*/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x48)Aborted*
Run Code Online (Sandbox Code Playgroud)
可能的原因是什么?如何纠正?
我正在处理一个需要禁用编译器优化保护才能工作的作业问题.我在ubuntu linux上使用gcc 4.4.1,但无法弄清楚哪些是正确的.我意识到它依赖于架构 - 我的机器运行32位英特尔处理器.
谢谢.
在执行该指令之前,fs包含0x0.
另外我想知道如何从GDB中的这个内存区读取,这个命令是什么?
码:
int str_join(char *a, const char *b) {
int sz =0;
while(*a++) sz++;
char *st = a -1, c;
*st = (char) 32;
while((c = *b++)) *++st = c;
*++st = 0;
return sz;
}
....
char a[] = "StringA";
printf("string-1 length = %d, String a = %s\n", str_join(&a[0],"StringB"), a);
Run Code Online (Sandbox Code Playgroud)
输出:
string-1 length = 7,char*a = StringA StringB
***堆栈粉碎检测****:/ T02终止
中止(核心倾倒)
我不明白为什么它会显示堆栈粉碎?什么是*堆栈粉碎?或者是我编译器的错误?