我在从VS2005转换为VS2008的项目中出现缓冲区溢出错误。 我想知道是否有任何工具可以帮助找到缓冲区溢出的位置。
答案 0 :(得分:0)
我假设您使用的是c ++。
在microsoft c ++中,有一个编译器开关/GS
来查明是否存在缓冲区溢出。有关详细信息及其工作原理,请参阅MSDN Compiler Security Checks In Depth。
至少在c#-developpment中(但希望也在c ++中)有一个调试器选项 “如果异常是......则中断”,如果抛出异常则停止程序执行(因为c ++运行时检测到存在缓冲区溢出。在vs2010中,它处于Debug / Exceptions ...
您还可以使用扫描源代码的Microsofts PREfast来查找可能不安全的函数(strcpy)
答案 1 :(得分:0)
由于sprintf的行为不同,非空终止字符串被写入数组边界之外。这反过来又破坏了堆栈并导致缓冲区溢出。 Visual Studio中的/ GS开关报告缓冲区溢出,因此可以帮助找出系统崩溃的原因。