マップ ファイルで見つかったアドレスを使用して、windbg を使用して、アプリの実行中にメモリ内の変数を変更できますか?
おそらく変数を使用して、実行時に機能のオン/オフを切り替えることに本当に興味があります。
これをどのように行いますか?デバッガーを介してアプリを中断する必要がありますか?
アドレスがあれば、任意の e* (値の入力) コマンドを使用できます。
プロセス ID がわかっている場合は、実行中のプロセスにアタッチできます。または、cdb を使用して exe を直接起動することもできます。変更を行うには、プロセスを中断する必要があります。CDB では、Ctrl+C を使用できます。これにより、プロセスに DebugBreak が挿入され、スタック、スレッド、およびメモリを確認できます。
一度だけヒットするブレークポイントを設定し、値を編集して実行を継続できます。何かのようなもの:
bp /1 012ABCDEF "myVar=42;g"
上記をアドレス値と変数名に置き換えます。
やった。シンボルがマッピングされていて、変数を確認できるブレークポイントにいると仮定すると、これを行うだけです-「myvar」が整数であると仮定します:
?? myvar [[ これは現在の内容を示しています ]]
?? myvar=55 [[ これにより、myvar の値が 55 に変更されます]]
?? myvar [[ これは私の var の更新された内容を表示します - これは 55 です ]]
g [[ これでプログラムが実行され、次に myvar を読み取ると 55 が生成されます]]
あなたが何を達成しようとしているのか正確にはわかりませんが、デバッガーは、アクティブ化された後、何らかのイベント (例外、ブレークポイントなど) でアクティブ化する必要があります。変数。
デバッガーでは、コマンドでブレークポイントを設定できます。このガイドを参照してください。パラメーターを変更するものは何ですか。
これがあなたの質問に答えることを願っています。そうでない場合は、質問を明確にしてください。
コマンドでブレークポイントが発生した場合、アプリケーションはブレークされ、人間の介入なしに実行を継続します。アプリケーションが実行を停止せずにデバッガーが何かを実行する方法がわかりません。
考えただけですが、これにはデバッガが必要ですか?そのためにレジストリを使用して、これを使用してレジストリの変更に関する通知を受け取ることはできませんか。
あなたは間違いなくそれを行うことができます. 関数を中断して、ローカル ウィンドウで編集します。または、e コマンドを使用して値を編集します。詳細については、windbg のヘルプを参照してください。