1

メモリ アドレスの値に基づいて、プログラムの実行を (ブレーク後に) 段階的に続行するスクリプトを作成できないか考えています。したがって、関数をトレースしていてメモリ値が高くなった場合、メモリ値が設定値を下回るまで gdb スクリプトを呼び出すと、再び壊れてしまいます。

私は gdb に非常に慣れておらず、まだマニュアル/チュートリアルを読んでいますが、私の目標が可能かどうかを知りたいです:)

ありがとう!

編集、擬似コードで更新:

while (1) {
    cma = getMemoryAddressForCurrentInstruction();
    if (cma > 0xdeadbeef) {
        stepi;
    } else {
        break;
    }
}
4

1 に答える 1

1

あなたはプログラムカウンター(時々命令ポインターと呼ばれる)について話している。gdbではとして利用できます$pc。擬似コードは、次の実際のgdbコマンドに変換できます。

while $pc <= 0xdeadbeef
    stepi

すべての命令に対してプログラムを開始および停止するため、時間がかかりますが、私が知る限り、探しているアドレスが正確にわからない場合、それを実行するための迅速な方法はありません。そうした場合、そこにブレークポイントを設定することができます。

break *0xf0abcdef
cont

プログラムカウンターが0xf0abcdefに達するまで実行されます

于 2012-09-05T23:22:12.787 に答える