C++ 在Windows 7上使用windbg调试BEX(0xc0000417)异常

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

我正在调试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 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等)缩小位置