問題タブ [dbgeng]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
debugging - 最初のスタック フレームのフレーム ポインター オフセットを取得する
Windbg 用に作成している拡張機能のために、すべてのスタック フレームのベース アドレスとトップ アドレスを取得する必要がありました。例として、ここに私が得たものがあります:
ESP=0023c79c EBP=0023c79c
ここの msdn ドキュメントによると、FrameOffset がゼロの場合は現在のフレーム ポインターを使用する必要があり、StackOffset がゼロの場合は現在のスタック ポインターを使用する必要があります。
http://msdn.microsoft.com/en-us/library/windows/hardware/ff548425%28v=vs.85%29.aspx
最初のフレーム、または上記の例のフレーム #26 では、フレーム オフセットがゼロであることを示していますが、現在のフレーム オフセット EBP は 0023c79c であり、スタックの一番上を参照しているため、フレーム # に対応することはできません。 26 のフレーム オフセット。では、スタック フレーム #26 のベースを正確に見つけるにはどうすればよいのでしょうか。
別の質問!teb
ですが、windbg で実行すると、次のスタック範囲が得られます。
では、26 番目のスタック フレーム ポインターとスタックのベースの間の 8360 バイト (240000 - 23df58) には、正確には何が含まれているのでしょうか? それはすべて 26 番目のスタック フレーム自体で構成されているのでしょうか、それともその間に何か他のものがありますか? (ret と ebp は別として)
debugging - dbgeng の DisassemblyWide() によって逆アセンブルされた命令からアドレスを削除します
DisassembleWide()
Windbg の拡張機能を作成する際に、オフセットを関数に渡して命令を逆アセンブルしています。ただし、逆アセンブルされた命令では、命令のアドレス + その命令の 16 進オペコードが追加されます。
DEBUG_ASMOPT_NO_CODE_BYTES
でフラグを指定することで、オペコードを削除できましたSetAssemblyOptions()
。ただし、命令オフセットを取り除くことができないようです。どちらも機能DEBUG_ASMOPT_DEFAULT | DEBUG_ASMOPT_NO_CODE_BYTES
していない(DEBUG_ASMOPT_DEFAULT | DEBUG_ASMOPT_NO_CODE_BYTES) & ~DEBUG_ASMOPT_VERBOSE
ようです。
何か不足していますか?命令からオフセットをきれいに削除する方法はありますか、それとも手動で行う必要がありますか?
dbgeng - dbgeng を使用した実行中のプロセスのデバッグ
ダンプ ファイルからメモリをスキャンする wdk のサンプルに基づいた簡単なプログラムを作成しました。
今、プロセスの実行中に同じことをしたいと思いますが、いくつかの問題に直面しています:
実行中のプロセスを中断する方法がわかりません
プログラムを終了すると、DetachProcess を呼び出したときにデバッグ対象が閉じられます。
ありがとう
windows - DebugExtensionProvideValue を実装すると、WinDbg の内部状態が壊れますか?
DebugExtensionProvideValue
カスタム疑似レジスタを提供できるように、拡張機能に実装しています。CDB では完全に動作し、WinDbg では最初は正常に動作しますが、デバッグを停止して新しい実行可能ファイルを開くと、何かが発生し、WinDbg は奇妙な使用不能状態になります。
問題が発生すると、WinDbg は次のメッセージをコマンド ウィンドウに出力します。
コールバックを配信できません、3131
これが発生した後、WinDbg はすべての出力をコマンド ウィンドウに 2 回出力するようです!
私の拡張コードは非常に単純です:
問題を再現すると、次のようになります。
機能しているように見える回避策を思い付くことができましたが、QI も AddRef も行っていないインターフェイスをリリースする必要があるため、正しくないと感じます。私の最小限のテストでは、このハックがクラッシュすることはありませんでした.
私が知る限り、デバッグを停止して CDB でこのような新しい .exe を開くことはできないため、問題は WinDbg でのみ発生するようです。
私は何か間違ったことをしていますか、それとも DbgEng にバグがありますか?
windbg - IDebugControl5.GetContextStackTraceEx でスタック フレームをインライン化しますか?
DEBUG_STACK_FRAME_EX
インライン フレームのシンボルを解決するにはどうすればよいですか?
と は認識してDEBUG_STACK_FRAME_EX
いますが、 を対応するシンボルULONG
InlineFrameContext
に解決する方法がわかりません。InlineFrameContext
と のFrameSignature
とFrameId
は何INLINE_FRAME_CONTEXT
ですか?