objdump-dの呼び出しによって返されるアセンブリ結果の制御フローグラフを作成しようとしています。現在、私が思いついた最善の方法は、結果の各行をリンクリストに入れ、各行のメモリアドレス、オペコード、およびオペランドを分離することです。objdumpの結果の通常の性質に依存してそれらを分離しています(メモリアドレスは、各行を表す文字列の文字2から文字7までです)。
これが完了したら、実際のCFG命令を開始します。CFGの各ノードは、開始メモリアドレスと終了メモリアドレス、前の基本ブロックへのポインタ、および任意の子基本ブロックへのポインタを保持します。次に、objdumpの結果を調べて、オペコードをx86_64内のすべての制御フローオペコードの配列と比較します。オペコードが制御フローのものである場合、基本ブロックの終わりとしてアドレスを記録し、オペコードに応じて、2つの子ポインター(条件付きオペコード)または1つ(呼び出しまたは戻り)を追加します。
私はこれをCで実装している最中であり、動作するように見えますが、非常に希薄な感じがします。誰か提案、または私が考慮していない何かがありますか?
これを読んでくれてありがとう!
編集:
これを使用して、DynamoRIOによって生成されたシステムコールのスタックトレースを、ターゲットバイナリの予想されるCFGと比較するという考え方です。このように構築することで、それが容易になることを願っています。利用可能なものを再利用していません。A)実際にはそれについては理解していなかったため、B)パス比較を実行できるように、グラフを使用可能なデータ構造にする必要があるためです。私を正しい方向に向けてくれてありがとう、あなたが並べたページのユーティリティのいくつかを見ていきます。コメントありがとうございます、本当に感謝しています!