2013-10-21 97 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中的兩個違規但在不同的偏移量)之後,它停止了發生。 –