2009-03-16 14 views
1

COM DLLからその序数から実際の関数名を取得しようとしています。私はdumpbin.exeを使用しようとしましたが、各序数には[NONAME]が返されます(最初の数を除く)。COM DLLの序数から関数名を取得する方法

 
    ordinal hint RVA  name 

     21 0 00002439 DllCanUnloadNow 
     25 1 00007F41 DllGetClassObject 
     116 2 0000539C DllMain 
     138 3 00008633 DllRegisterServer 
     176 4 00008640 DllUnregisterServer 
      1  0009152E [NONAME] 
      2  00154CA7 [NONAME] 
      3  00154C0B [NONAME] 
      4  000140C9 [NONAME] 
     ... 

他のファイルが含まれていない.dllファイルを含むディレクトリ(* .TLB、*の.lib、* .defファイル)。

誰かにこれらのリストを取得する方法を教えてもらえますか? または少なくともレジストリなどを使用している特定の序数の名前ですか?

[編集:その他の情報] COM DLLの.defファイルが見つかりません。名前を取得するために使用できません。私はCOMクラスのインスタンス化に関心がありません、私は特定の関数が特定の序数に関連しているか知りたいだけです。

私の元の問題は、私は ChartFXClientServerCore!Ordinal5507(+ 0x97b7)で行わWinDbgをし、使用して例外を発見したということですので、私は問題を特定しようとする特定の機能を確認したいと思います。

答えて

2

Windows SDKのhttp://www.microsoft.com/downloads/details.aspx?FamilyId=F26B1AA4-741A-433A-9BE5-FA919850BDBF&displaylang=enに付属するOleViewツール(OLE/COMオブジェクトビューア)を使用できます。そのツールで、File-> View TypeLibに移動し、DLLを参照します。

EDIT:タイプライブラリによって公開されたDLLの序とメソッド名の間の関係についての質問を受けて:それはまた、DEFファイルを介して、または__declspecを介して公開されるCOM経由で公開されたメソッドのためにあまりにも一般的ではありません(DLLIMPORT )。通常、CoCreateInstance()などを使用して対応するクラスを作成した後、IUnknownから派生したインターフェイスを介してCOMメソッドにアクセスします。

DLLのプログラマは DEFファイル内のCOMメソッドの一部を公開するように選択することができますが、私の知る限りマッピングを把握する唯一の方法は、DUMPBIN /輸出の出力を見ている、非飾ります返された名前(undname.exe)を使用して、タイプライブラリ内の対応を視覚的に検索します。

+0

ありがとう、私はツールを使用して私のファイルを参照していますが、序数と関数名の間の関係を見つけることができません。 ライブラリの.defファイルが見つからないため、このツールがどのように機能するかわかりません(レジストリなどの情報を取得しますか?) – Groo

1

あなたのCOMコンポーネントがスクリプトに安全であるとマークされていない場合、OLEViewは実際の情報を持っていない可能性があります(つまり、スクリプトから呼び出す必要はありません。 idlでコンパイルされます)。

mIDAのようなものは、ほとんどの情報を得ることができます。 openrce、NDR RPC IDL、woodmannも検索できます。symbolviewerを試してみてください。 (RIP fravia)。

関連する問題