Lef*_*ris 8 c++ stack corruption
编辑:由于评论是关于我的例子我删除它并将其转换为一般问题:
有些时候,在我的项目中,我遇到了堆栈损坏.无论我多么努力编写代码来避免它,有时候这是不可避免的.但是当它发生时,有什么方法可以对抗呢?
我在这个博客中发现了一个好人给出的一个宏:http://rxwen.blogspot.com/2009/04/detect-stack-corruption.html,它读取ebp寄存器值以检测损坏.
但是必然会有更复杂的工具来帮助你不要徒步射击自己.我使用Codeblocks和gcc编译器在Windows中编程.我提出这个问题的原因是找到我可以在我的编程环境下使用的工具来帮助我检测这些错误并纠正它们.有什么建议?
感谢您的任何答案,并花时间阅读我的问题.
很明显你是否遇到了堆栈损坏。但我承认存在一些数据损坏。
一种相当有效的技术是在可疑字段周围添加保护字段:
...
long namecheck1;
Artist artist;
long namecheck2;
...
Run Code Online (Sandbox Code Playgroud)
让构造函数将它们初始化为大多数东西,但在不知道损坏的性质的情况下,非零的东西似乎更令人满意。
myclass::myclass() : namecheck1(0x12345678), namcheck2(0x12345678) ...
Run Code Online (Sandbox Code Playgroud)
添加一致性检查成员函数:
void myclass::isokay()
{
if (namecheck1 != namecheck2 ||
namecheck2 != 0x12345678)
cerr << "the object is corrupted";
... // maybe wait for input, cause core dump, etc.
}
Run Code Online (Sandbox Code Playgroud)
然后在代码中加入对此的调用,尤其是在可疑逻辑附近。如果您熟悉调试器,请在错误消息上放置断点。通过解开堆栈,您可以确定程序最近做了什么,并收集线索以了解哪些代码可能超出了正确的范围。