0

私は 4 つの関数を含む DLL ファイルを持っています。4 つの関数にアクセスする必要がありますが、それらには名前がなく、私が知っているエントリ ポイントだけです。4 つの関数が何をするのかを理解する必要があります。問題は、C#(.Net) でこれらの未知の関数をどのように呼び出すかです。そして、それらのパラメーターと戻り値が何であるかをどのように把握できますか? DLL はSndvolsso.DLL. その関数はインターネット上のどこにもありません (見つけられない限り) パラメーターを読み取って値を返すために使用できるツールを誰かが知っていれば、それは非常に役に立ちます。

4

3 に答える 3

2

DLL が管理されていない場合:-

IDA の使用

  1. dll を逆アセンブルし、エクスポートされた関数を見つけます。
  2. その関数をダブルクリックすると、その宣言が IDA に表示されます。

IDA の user32.dll の MessageBoxA の例:-

.text:77D6EA11
.text:77D6EA11 ; int __stdcall MessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType)
.text:77D6EA11       
于 2012-09-05T15:41:29.543 に答える
2

無料版のIDA 5.0も使用できます。

于 2012-09-05T15:46:16.780 に答える
0

パラメータ/タイプ/署名情報はアンマネージDLLファイルに保存されません。LoadLibraryGetProcAddress、および序数を使用して、エクスポートされた各関数のアドレスを取得できます。しかし、あなたが得るのは住所だけです。関数を適切に呼び出す方法を知るのはあなた次第です。

関数がバイナリ/マシンコードレベルでどのように機能し、スタックがどのように機能するかを理解するのに役立ちます。

オプションは次のとおりです。

  1. あなたが言ったように、インターネットのような外部ソースからの情報を見つけてください。
  2. PDBファイルが見つかった場合、これはデバッグ情報ファイルであり、デバッガーがメモリ内の場所をコード行に関連付ける方法を知る方法です。探しているすべてのメタデータが含まれます。しかし、あなたのシナリオでは、これにアクセスできるとは思いません。
  3. バイナリレベルでの実行可能コードのアセンブリと理解に慣れている場合は、DLLを逆アセンブルまたはデバッグしてください。何を期待しているか、スタックをどのように使用しているかを確認してください。

それ以外の場合は、妥協する必要があります。

  1. 別のライブラリを使用してください。最も実用的なのは、正直なところ、これについて何もsndvolsso.dll知らなければ、「機能」していても、問題が発生すると失われるからです。
  2. これができる人を雇う。
  3. これを使用する代わりに、独自のコードを作成するだけです。

しかし、考えてみると、あなたの質問は本当に意味がありません。これらの関数が何であるかわからない場合、どのようにしてそれらが必要であるかを知ることができますか?

于 2012-09-05T15:34:19.953 に答える