2

クラッシュ ダンプがWerpReportFault()スタックにあり、期待どおりに見えません。

私の期待

WerpReportFault()0x80000003 ブレークポイントと一緒に見た場合、 WinDbg を使用して、に渡された 2 番目の引数から取得したさまざまな例外ポインターで再ダンプできましたWerpReportFault()

あちらの回答でそれを推奨したので、以前はうまくいったと確信しています。この手法を提案している他のサイトもあります。たとえば、James Rossです。

私の現在の観察

私が分析しているダンプには、アクセス違反などの「通常の例外」が含まれています。

0:000> .exr -1
ExceptionAddress: 53ec8b55
   ExceptionCode: c0000005 (Access violation)
  ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 00000000
   Parameter[1]: 53ec8b55
Attempt to read from address 53ec8b55

しかし、彼らはまだWerpReportFault()スタックとして持っています:

0:000> k
ChildEBP RetAddr  
0018f25c 74c4171a ntdll!NtWaitForMultipleObjects+0x15
0018f2f8 75181a08 KERNELBASE!WaitForMultipleObjectsEx+0x100
0018f340 75184200 kernel32!WaitForMultipleObjectsExImplementation+0xe0
0018f35c 751a80ec kernel32!WaitForMultipleObjects+0x18
0018f3c8 751a7fab kernel32!WerpReportFaultInternal+0x186
0018f3dc 751a78a0 kernel32!WerpReportFault+0x70
0018f3ec 751a781f kernel32!BasepReportFault+0x20
0018f478 7295fa2e kernel32!UnhandledExceptionFilter+0x1af

.dump引数 2 は、コマンドで使用するのに適した例外ポインターではないようです。

0:000> kb
ChildEBP RetAddr  Args to Child              
[...]
0018f3dc 751a78a0 0018f4a0 00000001 0018f478 kernel32!WerpReportFault+0x70
[...]

質問

私が抱えている問題の原因と、それを回避する方法は? !analyze -v実際の呼び出しスタックを教えてくれるので、それが可能でなければならないことはわかっています。

Visual Basic 6 と未処理の例外フィルターが原因ですか?

0018f478 7295fa2e 00000000 72a2bd04 0018f4a8 kernel32!UnhandledExceptionFilter+0x1af
0018ff80 00440fe2 00443860 7518338a 7efde000 msvbvm60!Zombie_Release+0x10fd5

すべての手動デバッグとすべてのスクリプトが壊れておりk、 andなどに依存しているため、私は本当に素晴らしい呼び出しスタックを持ちたいと思ってい!clrstackます。WerpReportFault()彼らはスタック上で対処できません。

VB6 の依存関係から想像できるように、すべてのダンプは 32 ビットです。

4

1 に答える 1

2

このような問題は、間違ったコンテキストによって引き起こされます。通常のコンテキストレコードに設定されているようです。例外コンテキストに設定するには、 を使用します.ecxr。通常のコンテキスト (表示されている) に戻すには、次を使用します。.cxr

于 2016-11-17T23:13:58.860 に答える