2009-03-09 26 views
1

私はGetHash()をエクスポートする1​​関数DLLを持っています。ただし、このDLLのソースコードは失われます。このコードを自分のMSVC++プロジェクトに統合する必要があります。紛失したソースコードから回復するには?

私はこれを行うためのシェアウェアのツールがいくつかあることを知っていますが、私は手動で行うことができると思います。

これを手動で行うには、何が必要ですか?

+0

私の編集について:タイトルの変更により、このユーザーの長期的にはより有益な回答が得られると思います。私は変化にもかかわらず、それは起こりそうな答えのタイプを変えてしまうからです。 –

+0

まだ必要な場合は、手動で逆コンパイルを行うことができます。 –

答えて

2

ビルドするプロジェクトで、dllを参照してハッシュ関数を呼び出します。 デバッガでコードを実行し、関数をステップインして逆アセンブルし、高水準言語に変換し直します。

これで十分でない場合は、ASMブロックを使用して実装できる一連の関数にコードを逆アセンブルします。

+0

ありがとう、それを試して返します – Svetlana

1

DLLのLIBファイルはありますか? H(eader)ファイルですか?両方とも静的にリンクする必要がありますが、これは最も簡単な方法です。

それ以外の場合、最も簡単なルートは、おそらくそれを動的にリンクするだけです。 (これはCOM DLLでない限り、RegSvr32にする必要がありますか?その場合、参照してCOMスタイルと呼ぶことができます)。LoadLibrary()とGetProcAddress()を使用して、関数ポインタ。そして、ここで物事が厄介なものがあります:どのような呼び出し規約が関数を使用するか、どのパラメータ、どのような戻り値の型ですか?それらを持っている場合は、適切な関数ポインタ型を定義することができます(例えば "int fphasher *(char *)")。そうでなければ、多くの面白い実験や解体のリストを作成して、正しいものを得るために準備してください。

DllExportViewerのようなDLLビューアは、関数名の取得に役立ち、C++またはCスタイルの呼び出し規則利用される。警告:私はこの特定のバージョンをテストしていません。

1

もう1つの方法は、DLLを逆アセンブルして元のソースコードを復元することだと思います。これで、コードをコードベースに統合してよりよく管理することができます。

これは、この問題の長期的な解決策になりそうです。

関連する問題