1

COM dll の序数から実際の関数名を取得しようとしています。使ってみましたが、序数ごとdumpbin.exeにしか返されません(最初のいくつかを除く)。[NONAME]

    序数のヒント RVA 名

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

.dll ファイルを含むディレクトリには、他のファイル (*.tlb、*.lib、*.def) は含まれていません。

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

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

私の元の問題は、ChartFXClientServerCore!Ordinal5507(+0x97b7) で発生する WinDbg を使用して例外を見つけたことです。そのため、問題を特定するために特定の関数を確認したいと思います。

4

2 に答える 2

2

OleViewツール(OLE / COM Object Viewer)を使用できます。このツールは、Windows SDK(http://www.microsoft.com/downloads/details.aspx?FamilyId=F26B1AA4-741A-433A-9BE5 )に同梱されています。 -FA919850BDBF&displaylang=en。そのツールで、[ファイル]-> [TypeLibの表示]に移動し、DLLを参照します。

編集: DLLの序数とtypelibによって公開されるメソッド名との関係に関する質問への回答:COMを介して公開されるメソッドが、DEFファイルまたは__declspec(dllimport)を介して公開されることはあまり一般的ではありません。通常、CoCreateInstance()などを介して対応するクラスを作成した後、IUnknownから派生したインターフェイスを介してCOMメソッドにアクセスします。

DLLのプログラマーは、DEFファイル内のCOMメソッドの一部を公開すること選択できますが、マッピングを理解する唯一の方法は、dumpbin / exportsの出力を確認し、返された名前の装飾を解除することです(undnameを使用) .exe)そしてtypelibで対応を視覚的に見つけます。

于 2009-03-16T08:47:31.803 に答える
1

COMコンポーネントがスクリプトに対して安全であるとマークされていない場合、OLEViewには実際の情報がない可能性があります(つまり、スクリプトから呼び出されることはないため、呼び出す方法に関するすべての情報(typelib)は、 idl)。

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

于 2009-07-18T14:12:51.353 に答える