2

ソースのない共有オブジェクト ファイルがあります。特定の関数に入ったときに何が起こるかに興味があります。特定の状況 (利用可能な Wifi 接続がある場合) でこの関数に入ると、プログラムは特定の方法で反応します。別の状況 (接続が利用できない) では、別の方法で動作します。このチェックを回避するために共有オブジェクト ファイルにパッチを適用する目的で、外部状況 (Wifi 接続の存在) がテストされているプログラム内のポイントを特定しようとしています。

を使用するgdbと、プログラムの実行を手で追うことができます。ただし、実行パスが異なるポイントを手で見つけるのは面倒です。gdb実行中のマシン命令のシーケンス (およびオプションで、レジスタの内容などの状態) を保存し、両方の状況でシーケンスを比較して、外部条件がチェックされている時点をより簡単に判断する方法はありませんか? ?

関連するgdb record機能のようですが、プログラムがARMで実行されており、このターゲットでは記録がサポートされていないため、これを使用できません。ただし、パフォーマンスはまったく重要ではないため、ハードウェア サポートの形式を探しているわけではありませんgdb。でプログラム実行ni。このようなものは存在しますか?

4

1 に答える 1

2

いくつかのアイデアが思い浮かびます。

ループで「stepi」を呼び出すことでこれを自動化し、ログ機能を使用して gdb の出力をログに記録できます。次に、2 つのログ ファイルを比較できます。

または、Python から同じことを行うこともできます。これにより、生成するデータの形式をより適切に制御できるようになります。

また、これは以前にも行われたことを漠然と思い出しました。gdb wiki またはメーリング リストのアーカイブを検索できます。

于 2013-05-31T02:07:33.857 に答える