私は 4 つの関数を含む DLL ファイルを持っています。4 つの関数にアクセスする必要がありますが、それらには名前がなく、私が知っているエントリ ポイントだけです。4 つの関数が何をするのかを理解する必要があります。問題は、C#(.Net) でこれらの未知の関数をどのように呼び出すかです。そして、それらのパラメーターと戻り値が何であるかをどのように把握できますか? DLL はSndvolsso.DLL
. その関数はインターネット上のどこにもありません (見つけられない限り) パラメーターを読み取って値を返すために使用できるツールを誰かが知っていれば、それは非常に役に立ちます。
質問する
388 次
3 に答える
2
DLL が管理されていない場合:-
IDA の使用
- dll を逆アセンブルし、エクスポートされた関数を見つけます。
- その関数をダブルクリックすると、その宣言が 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ファイルに保存されません。LoadLibrary
とGetProcAddress
、および序数を使用して、エクスポートされた各関数のアドレスを取得できます。しかし、あなたが得るのは住所だけです。関数を適切に呼び出す方法を知るのはあなた次第です。
関数がバイナリ/マシンコードレベルでどのように機能し、スタックがどのように機能するかを理解するのに役立ちます。
オプションは次のとおりです。
- あなたが言ったように、インターネットのような外部ソースからの情報を見つけてください。
- PDBファイルが見つかった場合、これはデバッグ情報ファイルであり、デバッガーがメモリ内の場所をコード行に関連付ける方法を知る方法です。探しているすべてのメタデータが含まれます。しかし、あなたのシナリオでは、これにアクセスできるとは思いません。
- バイナリレベルでの実行可能コードのアセンブリと理解に慣れている場合は、DLLを逆アセンブルまたはデバッグしてください。何を期待しているか、スタックをどのように使用しているかを確認してください。
それ以外の場合は、妥協する必要があります。
- 別のライブラリを使用してください。最も実用的なのは、正直なところ、これについて何も
sndvolsso.dll
知らなければ、「機能」していても、問題が発生すると失われるからです。 - これができる人を雇う。
- これを使用する代わりに、独自のコードを作成するだけです。
しかし、考えてみると、あなたの質問は本当に意味がありません。これらの関数が何であるかわからない場合、どのようにしてそれらが必要であるかを知ることができますか?
于 2012-09-05T15:34:19.953 に答える