2012-01-25 14 views
0

プロシージャを抽出する必要がある64ビットCOFFオブジェクトファイル(ソースコードもデバッグ情報もありません)があります。オブジェクトファイルから単一のプロシージャを抽出していますか?

手順は比較的短く、そののみ依存関係は以下のとおりです。

  1. 一つのグローバル変数。
  2. インポートされた手順のカップル。

私は既にコードの逆アセンブルと再組み立てを試みました。しかし、何らかの奇妙な理由のために、たとえコードがデバッガとディスアセンブラで同じに見えても、同じように動作しません。 (私はすでに実行可能セクションに正しいフラグが設定されていることを確認しようとしましたが、私の知る限り、これらはすべて正しいものであり、実行時に値が一致する必要があります)。

So直接新しいオブジェクトファイルへの機能の上にコピー(または機能以外のすべてを削除する)にどのような方法は、プロセスにコードを逆アセンブルし、再組み立てを有するなくて、あるのでしょうか?

答えて

1

わかりませんが、一般的には簡単な方法があります。

たとえば、複数のプロシージャは、1つの共有コード(静的関数)を参照できます。だからあなたは、ファイルとのすべてのコードブロックのコールグラフを構築し、あなたの手続きによって参照されるコードブロックを取る必要があります。新しいコードレイアウトが存在するため、すべてのジャンプと呼び出しでアドレスを修正する必要があります。

+0

つまり、特別なユーティリティを作成する必要があります。しかし、あなたが持っているオブジェクトファイルを使用してみませんか?私は、リンカはそれから未使用の関数をリンクしないと思う。関数がファイルに格納される方法によって異なりますが、それらはパックされている可能性があります。 –

関連する問題