2009-04-17 64 views
2

私はdllからいくつかの関数をインポートするWinformアプリケーション(C#)を持っています。WinDbgの出力を理解する

System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

私はそれがAppDomain.CurrentDomain.UnhandledExceptionでキャッチ:アプリケーションの実行時

は時々私は次の例外を取得します。

私はWinDbgでデバッグしようとしました。私は、次の出力の例外をキャッチし、取得することができました!

FAULTING_IP: 
KERNEL32!SetErrorMode+14b 
77e6c427 8a08   mov  cl,byte ptr [eax] 

EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff) 
ExceptionAddress: 77e6c427 (KERNEL32!SetErrorMode+0x0000014b) 
    ExceptionCode: c0000005 (Access violation) 
    ExceptionFlags: 00000000 
NumberParameters: 2 
    Parameter[0]: 00000000 
    Parameter[1]: 087deadc 
Attempt to read from address 087deadc 

FAULTING_THREAD: 00000b1c 

PROCESS_NAME: App.exe 

ERROR_CODE: (NTSTATUS) 0xc0000005 - The instruction at "0x%08lx" referenced memory at "0x%08lx". The memory could not be "%s". 

EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at "0x%08lx" referenced memory at "0x%08lx". The memory could not be "%s". 

EXCEPTION_PARAMETER1: 00000000 

EXCEPTION_PARAMETER2: 087deadc 

READ_ADDRESS: 087deadc 

FOLLOWUP_IP: 
KERNEL32!SetErrorMode+14b 
77e6c427 8a08   mov  cl,byte ptr [eax] 

NTGLOBALFLAG: 0 

APPLICATION_VERIFIER_FLAGS: 0 

MANAGED_STACK: !dumpstack -EE 
OS Thread Id: 0xb1c (34) 
Current frame: 
ChildEBP RetAddr Caller,Callee 

ADDITIONAL_DEBUG_TEXT: Followup set based on attribute [UnloadedModule_Arch_AX] from Frame:[0] on thread:[b1c] ; Enable Pageheap/AutoVerifer 

DEFAULT_BUCKET_ID: HEAP_CORRUPTION 

PRIMARY_PROBLEM_CLASS: HEAP_CORRUPTION 

BUGCHECK_STR: APPLICATION_FAULT_HEAP_CORRUPTION_INVALID_POINTER_READ 

LAST_CONTROL_TRANSFER: from 7a0aa797 to 77e6c427 

STACK_TEXT: 
WARNING: Stack unwind information not available. Following frames may be wrong. 
08bddc6c 7a0aa797 00000000 00000001 087deadc KERNEL32!SetErrorMode+0x14b 
08bddd68 7c82a124 056306e8 08bddf9c 7c82a0b8 mscorwks!CorLaunchApplication+0x281f8 
08bddd74 7c82a0b8 7c82a0fc 00000001 00000004 ntdll!RtlpAllocateFromHeapLookaside+0x13 
08bddf9c 00000000 00000000 00000000 00000000 ntdll!RtlAllocateHeap+0x1dd 


STACK_COMMAND: .ecxr ; ~~[b1c] ; .frame 0 ; ~34s ; kb 

SYMBOL_NAME: ure.dll!Unloaded 

FOLLOWUP_NAME: MachineOwner 

MODULE_NAME: ure.dll 

IMAGE_NAME: ure.dll 

DEBUG_FLR_IMAGE_TIMESTAMP: 750063 

FAILURE_BUCKET_ID: HEAP_CORRUPTION_c0000005_ure.dll!Unloaded 

BUCKET_ID: APPLICATION_FAULT_HEAP_CORRUPTION_INVALID_POINTER_READ_ure.dll!Unloaded 

WATSON_STAGEONE_URL: http://watson.microsoft.com/StageOne/App_exe/1_2009_403_12/49e707a9/KERNEL32_dll/5_2_3790_4062/46264680/c0000005/0002c427.htm?Retriage=1 

Followup: MachineOwner 

を-v分析することは何を意味するのでしょうか?そして私はそれと何をすべきですか?

事前にお問い合わせいただきありがとうございます。

答えて

2

ure.dllがアンロードされていて、それを参照している NlsAnsiToUnicode MultiByteToWideChar()の呼び出しが失敗しているようです。その確認のため!analyze -vの前に.symfixを実行することができます。

インポートするのはDLLですか?そうでない場合は、メモリの破損があります。さもなければ、バグはおそらくそのDLLにあります。 P/Invokeを使用してインポートしていますか?


いいえ、アンロードされたDLL情報が壊れています。ご想像のとおり、.NETのculture.dllであり、Windbgはタイムスタンプとチェックサムとしてその「カルト」部分を読み込んでいます。次を再起動してやってみてください。

.symfix 
sxe ud 
g 

とブレークポイントのヒット:

kb 

ファイル名を指定して実行(それはスタックをダンプその後、DLLがアンロードされるまで実行しWindbgのを言って、です)モジュールをアンロードさせ、次のコマンドを実行するためのビットです。そして、あなたが例外を取得するまでのWindbgが実行してみましょう、と比較するために、再度このコマンドを実行します。

db ntdll!RtlpUnloadEventTrace 

(。それは壊れてきている無負荷モジュールテーブルの始まりだ)

+0

イムこのDLLを使用していません。私は自分のコンピュータにも持っていません。私はこれまでにそれを聞いたことがない。なぜそれをロードしようとしているのか分かりません。しかし、それはアンロードされます。 アンロードモジュール: 00000001 4333ab5a ure.dll タイムスタンプ:火3月31日午前1時56分51秒1970(00750063) チェックサム:!また0074006C 私は実行私に結果を与える前に、-vを分析します ***警告:ure.dllのタイムスタンプを確認できません ***エラー:モジュールの読み込みが完了しましたが、ure.dllのシンボルを読み込めませんでした Help! – Anya

+0

ああ、そうは思いませんでした!どの時点で私はそれらのコマンドを実行する必要がありますか?例外が発生した直後ですか?分析する前に?後?行く前に?多くのありがとう!:) – Anya

+0

例外がキャッチされる前に。 – Mark

関連する問題