我有一个很大的C语言代码,当我运行它时,我得到了错误的消息。*** stack smashing detected***; <unknown> terminated
但当我用 -fno-stack-protector
一切都很好。
这很奇怪,因为如果代码破坏了堆栈,那么这个过程就不需要像我所想的那样工作了。
有什么办法(用gcc-ecplise调试器)可以找出导致这个错误的是哪一行?
这很奇怪,因为如果代码破坏了堆栈,那么这个过程就不需要像我想象的那样工作了。
破坏堆栈是未定义的行为,所以 任何 可能发生的情况,包括在某些输入和某些编译标志组合下,程序看起来可以正常工作。
有没有什么办法(用gcc-ecplise调试器)找出导致这个错误的行?
你无法确定 行 导致堆栈粉碎,但你应该能够确定。功能 中发生的,然后(如果bug仍然不明显)将这个函数的主体缩减为只导致栈缓冲区溢出的语句。
要做到这一点,编译时使用 -g
,在GDB(或Eclipse)下运行程序,然后使用 where
崩溃点的命令。