如何用Ecplise检测C语言中的堆栈粉碎现象?

问题描述 投票:0回答:1

我有一个很大的C语言代码,当我运行它时,我得到了错误的消息。*** stack smashing detected***; <unknown> terminated

但当我用 -fno-stack-protector 一切都很好。

这很奇怪,因为如果代码破坏了堆栈,那么这个过程就不需要像我所想的那样工作了。

有什么办法(用gcc-ecplise调试器)可以找出导致这个错误的是哪一行?

c gdb eclipse-cdt
1个回答
0
投票

这很奇怪,因为如果代码破坏了堆栈,那么这个过程就不需要像我想象的那样工作了。

破坏堆栈是未定义的行为,所以 任何 可能发生的情况,包括在某些输入和某些编译标志组合下,程序看起来可以正常工作。

有没有什么办法(用gcc-ecplise调试器)找出导致这个错误的行?

你无法确定 导致堆栈粉碎,但你应该能够确定。功能 中发生的,然后(如果bug仍然不明显)将这个函数的主体缩减为只导致栈缓冲区溢出的语句。

要做到这一点,编译时使用 -g,在GDB(或Eclipse)下运行程序,然后使用 where 崩溃点的命令。

© www.soinside.com 2019 - 2024. All rights reserved.