sha*_*oth 2 c++ debugging visual-studio-2008 visual-c++
我有一个用Visual C++ 9编写的巨大的MMC管理单元.每当我在MMC中遇到F5时,mmc.exe崩溃了.如果我附加调试器,我会看到以下消息:
mmc.exe中发生缓冲区溢出,破坏了程序的内部状态.按Break可调试程序或继续终止程序.
有关更多详细信息,请参阅帮助主题"如何调试缓冲区溢出问题".
首先,没有如何调试缓冲区溢出问题任何地方主题.
当我检查调用堆栈时,我发现可能有一些安全cookie用于防止堆栈分配的缓冲区溢出:
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
Run Code Online (Sandbox Code Playgroud)
我有很多代码,不知道缓冲区溢出可能发生在哪里以及原因.我找到了这个论坛的讨论,特别是建议用更安全的版本替换所有类似wcscpy的函数,比如wcscpy_s().我遵循了建议,并没有让我更接近问题的解决方案.
如何调试我的代码并查找Visual Studio 2008发生缓冲区溢出的原因和位置?
添加/ RTC切换到编译器.这样可以在运行时检测缓冲区溢出和欠载.当检测到溢出时,程序将完全打破它发生的位置,而不是给你死后的消息.
如果这没有帮助,那么调查你提到的wcscpy_s()调用.验证"元素数量"是否具有正确的值.我最近修复了缓冲区溢出导致wcscpy_s()的错误使用.这是一个例子:
const int offset = 10;
wchar_t buff[MAXSIZE];
wcscpy_s(buff + offset, MAXSIZE, buff2);
Run Code Online (Sandbox Code Playgroud)
请注意,buff + offset具有MAXSIZE - 偏移元素,而不是MAXSIZE.
| 归档时间: |
|
| 查看次数: |
15916 次 |
| 最近记录: |