2013-10-21 98 views
2

我的应用程序在MSHTML工作线程启动时崩溃。该EXCEPTION_RECORD给出:DEP(数据执行保护)违反可执行地址?

0:066> .exr 0e11f668 
ExceptionAddress: 732019ab (rtutils!AcquireWriteLock+0x00000010) 
    ExceptionCode: c0000005 (Access violation) 
    ExceptionFlags: 00000000 
NumberParameters: 2 
    Parameter[0]: 00000008 
    Parameter[1]: 732019ab 
Attempt to execute non-executable address 732019ab 

!address表明地址732019ab确实是可执行文件:

0:066> !address 732019ab 
Usage:     Image 
Base Address:   73201000 
End Address:   7320a000 
Region Size:   00009000 
State:     00001000 MEM_COMMIT 
Protect:    00000020 PAGE_EXECUTE_READ 
Type:     01000000 MEM_IMAGE 
Allocation Base:  73200000 
Allocation Protect:  00000080 PAGE_EXECUTE_WRITECOPY 
Image Path:    C:\Windows\SysWOW64\rtutils.dll 
Module Name:   rtutils 
Loaded Image Name:  rtutils.dll 
Mapped Image Name:  
More info:    lmv m rtutils 
More info:    !lmi rtutils 
More info:    ln 0x732019ab 
More info:    !dh 0x73200000 

在732019ab的指令是:

0:066> u 732019ab l1 
rtutils!AcquireWriteLock+0x10: 
732019ab 8d4618   lea  eax,[esi+18h] 

为什么一个DEP违反处于报告其页面被标记为PAGE_EXECUTE_WRITECOPY的地址?

回答

0

是的,这似乎是不可能的。我没有答案,但可能性列表太长,无法评论。

如果我猜测,我会说有些东西在播放该页面上的保护标志,但是在异常提出之后(或同时)将其放回PAGE_EXECUTE_READ。首先查看您的代码(或您使用的任何库)是否与VirtualProtect一起玩。

如果不透露任何,我们可以移动到其他一些可能性:

  1. 恶意软件

    可能是恶意软件喜欢用钩/热修补功能发挥,并已知会导致类似问题。

  2. 故障杀毒

    防病毒应用程序采用了很多同样的招数为恶意软件的。如果问题在禁用后停止,您就找到了您的罪魁祸首,并可以查看更新/替换它。

  3. 一个坏内核驱动程序

    在内核模式下,可以达到不可能的意外,但从来没有故意的。 :)

  4. 有故障的CPU

    超频或冷却不良的CPU可能会导致很多不可测的事情发生。不太可能,但可能。

+0

谢谢肖恩,我会记住这些可能性。奇怪的是,在能够重现问题2次(rtutils.dll中的两个违规但在不同的偏移量)之后,它停止了发生。 –