C++ 在Windows 7上使用windbg调试BEX(0xc0000417)异常
我正在调试32位windows 7上的应用程序崩溃。(我没有访问源代码的权限) 应用程序因BEX异常而崩溃C++ 在Windows 7上使用windbg调试BEX(0xc0000417)异常,c++,debugging,reverse-engineering,windbg,C++,Debugging,Reverse Engineering,Windbg,我正在调试32位windows 7上的应用程序崩溃。(我没有访问源代码的权限) 应用程序因BEX异常而崩溃 Problem signature: Problem Event Name: BEX Application Name: xxxxx.EXE Application Version: xx.xx.xxx.xxx Application Timestamp: xxxxx Fault Module Name: xxxxx.dll Fault Modul
Problem signature:
Problem Event Name: BEX
Application Name: xxxxx.EXE
Application Version: xx.xx.xxx.xxx
Application Timestamp: xxxxx
Fault Module Name: xxxxx.dll
Fault Module Version: x.x.xx.xx
Fault Module Timestamp: xxxxx
Exception Offset: xxxxxxxx
Exception Code: c0000417
Exception Data: 00000000
OS Version: x.x.xx.x.x.x.xxx.xx
Locale ID: xxxx
Additional information about the problem:
LCID: xxxx
skulcid: xxxx
上面的链接说,由于缓冲区溢出/DEP冲突(当它试图执行不可执行的页面时),BEX(c0000417==>STATUS\u INVALID\u CRUNTIME\u PARAMETER)发生异常。我认为这是应用程序中的一个安全问题
参考资料:
这看起来像是年安全CRT工作的延续
VS2008。异常由_invoke_watson()引发,很难跟踪
在它可能被称为的地方,有很多宏。这显然是为了
防止CRT函数继续使用无效参数,如
重大安全漏洞。通过在调试器中使用
调试+异常,已启用“抛出”复选框。你应该得到一份工作
显示问题函数调用的调用堆栈
问题是,当我使用windbg附加应用程序时,应用程序将被终止,而不是在故障点停止调试器。我在windbg屏幕上看到了这个
eax=000000c0 ebx=00000000 ecx=00000000 edx=2f9a1265 esi=00000198 edi=00000000
eip=778970d4 esp=01adfaa4 ebp=01adfb10 iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
ntdll!KiFastSystemCallRet:
778970d4 c3 ret
0:001> g
^ No runnable debuggees error in 'g'
所以我的问题是,如果我必须在确切的故障点中断调试器(而不是完全退出),我必须在OS/调试器设置中进行哪些更改 您是否已将调试器配置为在出现该异常时中断?请尝试使用
sxe c000417
,或者如果您对gui更熟悉,请使用Debug->事件过滤器
。我刚刚试过,但调试器仍然没有在错误点停止:(我看到被调试器进程突然终止。您是提前附加调试器还是作为事后调试器?如果尝试显示堆栈(k
),会发生什么情况不是继续执行?附加是唯一可用的选项吗?您是否可以创建进程?windbg foo.exe[需要的参数]如果是,当您点击f5运行调试对象时它是否终止?在这种情况下,您可以使用大量跟踪命令(如wt.pc.tc tr等)缩小位置