相关疑难解决方法(0)

检测到堆栈粉碎

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

可能的原因是什么?如何纠正?

c stack exception

225
推荐指数
5
解决办法
37万
查看次数

如何关闭gcc编译器优化以启用缓冲区溢出

我正在处理一个需要禁用编译器优化保护才能工作的作业问题.我在ubuntu linux上使用gcc 4.4.1,但无法弄清楚哪些是正确的.我意识到它依赖于架构 - 我的机器运行32位英特尔处理器.

谢谢.

c gcc buffer-overflow compiler-optimization

66
推荐指数
5
解决办法
9万
查看次数

"mov rax,QWORD PTR fs:0x28"汇编指令有什么作用?

在执行该指令之前,fs包含0x0.

另外我想知道如何从GDB中的这个内存区读取,这个命令是什么?

linux assembly gdb x86-64

14
推荐指数
1
解决办法
1万
查看次数

什么是堆栈粉碎(C)?

码:

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终止

中止(核心倾倒)

我不明白为什么它会显示堆栈粉碎?什么是*堆栈粉碎?或者是我编译器的错误?

c stack-overflow gcc stack-smash

5
推荐指数
2
解决办法
2万
查看次数