GDB用のPythonスクリプトを作成して関数をトレースしようとしています。GDB Pythonスクリプトによる指示の追跡
アイデアは、アドレス位置にブレークポイントを設定し、プログラムを実行させ、ブレーク時にファイルレジスタ、ベクトル、スタックにログし、次の命令がどのアドレスにあるかを調べ、ブレークポイントをオンにしますその場所とすすぎとリピート。
私はドキュメントを読みましたが、レジスタ、ベクタ、メモリの場所は簡単に破棄することができます。実際の問題は、次のブレークポイントをどこに配置するかを決定するために現在の命令の逆アセンブリを解析する必要があるため、次の命令位置が何であるかを見つけることです。
更新
ターゲットは、私が唯一のハードウェアブレークポイントと作品をデバッグし、私の知る限り、これらのコマンドは、次の命令で破断したソフトウェアブレークポイントを使用して知っているようだので、私はstepi
またはnexti
を使用せずにすべてをやっています
GDBのようなものはありますか?
私はデバッグ対象のソフトウェアブレークポイントを使用できないことを忘れてしまいました。私はハードウェアブレークポイントでそれを行う必要があります。そして、私が「si」がソフトウェアブレークポイントを使用して次の命令で停止すると言うことができる限り、 –
あなたはターゲットを言及していません。 Linuxでは、一歩は 'ptrace'リクエストに過ぎません。通常はチップ上にデバッグレジスタを使って実装されています。とにかく、これはあなたのために動作しない場合は、あなた自身であります。 gdbはこの領域にいくつかのロジックを持っています(主に逆もありますが、 "行外"のステッピングもあります)。しかし、この情報にはPythonからアクセスできません。 –
ターゲットはAndroidなので、まだLinuxのままです。 Android NDKのgdbserver実装を見て、彼らが使っているものを確認する必要があります。 Pythonを通していくつかの情報を抽出し、最終的にそれをCapstoneにパイプして、次の命令を理解するための苦労をするのに役立ちます。 –