我有一个巨大的MMC管理单元用Visual C++ 9编写。每隔一段时间,当我打开MMC中的F5 mmc.exe崩溃。如果我将一个调试器附加到它上面,我会看到以下消息:如何在Visual C++ 9中调试缓冲区溢出?
mmc.exe中发生缓冲区溢出,已损坏程序的内部状态。按Break键调试程序或继续终止程序。
有关更多详细信息,请参阅帮助主题“如何调试缓冲区溢出问题”。
首先,没有如何在任何地方调试Buffer Overrun Issues主题。
当我检查调用堆栈我看到它很可能一些与安全饼干用来防止堆栈分配的缓冲区溢出:
MySnapin.dll!__crt_debugger_hook() Unknown
MySnapin.dll!__report_gsfailure() Line 315 + 0x7 bytes C
mssvcr90d.dll!ValidateLocalCookies(void (unsigned int)* CookieCheckFunction=0x1014e2e3, _EH4_SCOPETABLE * ScopeTable=0x10493e48, char * FramePointer=0x0007ebf8) + 0x57 bytes C
msvcr90d.dll!_except_handler4_common(unsigned int * CookiePointer=0x104bdcc8, void (unsigned int)* CookieCheckFunction=0x1014e2e3, _EXCEPTION_RECORD * ExceptionRecord=0x0007e764, _EXCEPTION_REGISTRATION_RECORD * EstablisherFrame=0x0007ebe8, _CONTEXT * ContextRecord=0x0007e780, void * DispatcherContext=0x0007e738) + 0x44 bytes C
MySnapin.dll!_except_handler4(_EXCEPTION_RECORD * ExceptionRecord=0x0007e764, _EXCEPTION_REGISTRATION_RECORD * EstablisherFrame=0x0007ebe8, _CONTEXT * ContextRecord=0x0007e780, void * DispatcherContext=0x0007e738) + 0x24 bytes C
ntdll.dll!7c9032a8()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!7c90327a()
ntdll.dll!7c92aa0f()
ntdll.dll!7c90e48a()
MySnapin.dll!IComponentImpl<CMySnapin>::GetDisplayInfo(_RESULTDATAITEM * pResultDataItem=0x0007edb0) Line 777 + 0x14 bytes C++
// more Win32 libraries functions follow
我有很多的代码,也不知道哪里可能会出现缓冲区溢出为什么。我发现this forum discussion,特别是建议用更安全的版本(如wcscpy_s())替换所有类似wcscpy的功能。我遵循了建议,并没有让我更接近问题解决方案。
如何调试我的代码并查找Visual Studio 2008发生缓冲区溢出的原因和位置?
非常感谢指出/ RTC开关!为我节省了很多时间。 – Trass3r 2013-03-04 16:28:06