ダイアログボックスを使用してユーザーから情報を取得し、その情報に対して何らかの処理を実行する時点で、アプリケーションをデバッグしています。USER32!CreateDialogParamWにブレークポイントを設定することにより、ダイアログプロシージャのアドレスを見つけました。
最初は、プロシージャがWM_COMMANDメッセージを受信したときに中断したかったので、次のコマンドを使用しました。bp 00cfa1c0 "j(dwo(esp + 8)== 0x111)'';'gc'"
WinDbgとアプリケーションの間でALT-TABを実行している場合でも、何らかの理由でダイアログプロシージャがWM_COMMANDメッセージを受信するため、これは残念ながら十分ではありません。そこで、ダイアログの[OK]ボタンから通知コードBN_CLICKEDのWM_COMMANDを受信したときに、それを壊したいと思います。ダイアログテンプレートのボタンのコントロールIDは1であり、BN_CLICKEDはwinuser.hで0として定義されています。これは、[OK]ボタンをクリックするときに、ダイアログプロシージャのWPARAM引数が1であることを意味します。
次のコマンドを試しました:bp 00cfa1c0 "j(dwo(esp + 8)== 0x111 && dwo(esp + 12)== 0x1)'';'gc'"。これは最初は受け入れられますが、ブレークポイントが評価されると、次のように文句を言います。'&dwo(esp + 12)== 0x1)'';から数式が欠落しています。'gc''
2つの式を()で囲むことは役に立ちませんでした。ヘルプファイルを見ましたが、正直言ってさらに混乱します。私はWinDbgにかなり慣れておらず、英語は私の母国語ではありません。誰かが私を正しい方向に向けることができますか?
前もって感謝します。
PS:これは私がソースコードを持っていない32ビットアプリケーションです。