DEP(数据执行保护)违反可执行地址?

时间:2013-10-21 18:04:18

标签: debugging windbg

我的应用在启动时在MSHTML工作线程中崩溃了。 EXCEPTION_RECORD给出:

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的指示是:<​​/ p>

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

为什么在页面标记为PAGE_EXECUTE_WRITECOPY的地址上报告DEP违规?

1 个答案:

答案 0 :(得分:0)

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

如果我猜测,我会说某些内容正在播放该页面上的保护标记,但是在异常发生之后(或同时)将其放回PAGE_EXECUTE_READ。首先查看您的代码(或您使用的任何库)是否使用VirtualProtect

如果这没有透露任何内容,我们可以转向其他一些可能性:

  1. <强>恶意软件

    有些恶意软件喜欢使用挂机/热线安装,并且已知会导致类似的问题。

  2. 有缺陷的防病毒软件

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

  3. 错误的内核驱动程序

    在内核模式下,你可以意外地实现不可能,但绝不是故意的。 :)

  4. 有故障的CPU

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