22

文書化されていないDll 関数のパラメーターを見つけるにはどうすればよいですか?

私はインターネット全体を検索し、最終的に 1 つの方法を見つけました。装飾された関数が含まれます。ただし、それらを取得する方法が見つかりません。

どんな助けでも大歓迎です。

4

7 に答える 7

10

私はここでかなり詳細な回答をしまし.ReactOSはあなたの最善の策です.

システム DLL を逆アセンブルしようとしないことを強くお勧めします。

はるかに好都合な(そして、物事の外観からはこれまで議論されていないと思います) テクニックは、PDB のコンテンツを列挙することです。

ご存じのとおり、PDB ファイルはデバッグ シンボルですが、Microsoft は反トラスト裁判所の訴訟により、文書化されていない大量の情報を公開する必要があります。

膨大な量の Windows API に関する完全に正確で、使用可能で、更新された情報は、PDB ファイルを介してのみ文書化されています。呼び出し規則、引数の数、さらには引数の型と名前までが文書化されています (ただし、もちろん使用に関する詳細は含まれていません:)。

DIA SDK を確認してください。dia2dump は Visual Studio で配布されている良い例です。さらに調査するために、関数の装飾を解除して質問に具体的に話すためのソリューションも提供します。

また、kernel32 は UnDecorateSymbolName を提供しているため、デバッグ SDK ライブラリにリンクしたくない場合にも使用できます。

于 2009-07-02T09:37:16.210 に答える
10

Paul が指摘したように、IDA Pro (またはその無料版) などを使用して、アプリケーションを逆アセンブルする必要があります。

優れた入門リソースは、Wikibook のx86 Disassemblyです。具体的には、関数とスタック フレームに関するセクションをご覧ください。関数パラメーターの推定は、標準型のいくつかのパラメーターを使用する単純な関数の場合は簡単です。

おそらく、この種の作業を開始する最善の方法は、小さなテスト DLL を作成し、既知のパラメーターを使用していくつかの関数を作成し、DLL を逆アセンブルしてパターンを確認することです。サードパーティのものを逆アセンブルするのではなく、独自の関数 (ソース コードがあり、完全なシグネチャを知っている) から逆アセンブルを学びます。

于 2008-11-16T07:36:26.937 に答える
5

これを行う唯一の方法は、関数を逆アセンブルし、レジスタとスタックがどのように使用されているかを確認することです。IDA Pro はこれを行うのに最適なツールですが、簡単なことではありません。

于 2008-11-15T05:34:02.630 に答える
4

COM Dllですか?COM Dll の場合は登録し、OLE ビューを使用してインターフェイスとパラメータを確認します。

于 2008-11-16T07:24:19.177 に答える
3

まず、Dependency Walkerをダウンロードし、DLL を開きます。エクスポートおよびインポートされたシンボルが表示されます。関数名が _MyFunction のように見える場合 - それは "C" スタイル (装飾されていない) であり、あまり関係がありません (前述のように逆アセンブルされる可能性があります)。

?_MyFunction@LoNgSetOfSome@_StrangeChAracTers に似ている場合、それは C++ です - 装飾されており、ここからの {非公式} 情報を使用して「装飾を解除」してみてください。

于 2008-11-18T20:08:50.613 に答える
1

あなたが持っている唯一の情報が装飾されていない関数名である場合、残念ながらそれだけから関数パラメーターを推測することはできません。

アセンブリが得意な場合は、関数のマシン コードを逆アセンブルし、リバース エンジニアリングできる可能性があります。しかし、最も単純な関数を除いて、これを行うのはかなり困難です。

于 2008-11-15T05:34:26.653 に答える
1

私は、Windows が使用する PE 形式についてあまり詳しくありませんが、これを行うための本当に簡単な方法はないと確信しています。シンボル テーブルが削除されていない場合は、いくつかの情報を見つけることができる場合があります (Windows がどのようにデバッグ情報を PE に保存するかはわかりません) が、パラメーターの型についてはほとんど役に立ちません。最善の方法は、DLL をデバッガーにロードして実験することです... スタック フレームの生メモリを監視し、さまざまな変数の型を送信するなどです。

PE ファイルのデバッグ情報に関する適切なリソースが見つかったとしても、プライベート関数に関する情報はほぼ確実にありません。

于 2008-11-15T05:34:37.933 に答える