2

私が持っているプログラムが行うすべての呼び出しの長いリストがあります。私が知る必要があるのは、各呼び出しがどの DLL に属しているかです。どうすればこれを見つけることができますか?

ありがとう、

4

2 に答える 2

2

うーん...あなたのタイトルとあなたの質問は別のものを指しています。syscalls は、非常に具体的なもの、OS カーネルへの呼び出しを意味します (これらはdll にはありません)。

たまたま、Windows はそれらを直接公開するのではなく、syscall 自体を呼び出す役割を担うシステム DLL 内の API を公開します。

では、実際にはシステムコールのリストではなく、呼び出しのリストがあるとしましょう。このリストはバイナリから生成されていますか? バイナリには、実際には依存する dll のリストがあり、実際には、dumpbin /imports binary.exeあなたが求めているものを正確にリストします。

于 2010-04-06T18:50:28.967 に答える
1

実行可能ファイルを考えると、最も簡単な方法はおそらくdumpbin /imports <exe_name>. これにより、次のような出力が生成されます。

KERNEL32.dll
           405020 Import Address Table
           4060FC Import Name Table
                0 time date stamp
                0 Index of first forwarder reference

             126 GetModuleHandleA
             150 GetStartupInfoA

USER32.dll
           405480 Import Address Table
           40655C Import Name Table
                0 time date stamp
                0 Index of first forwarder reference

              F0 GetClientRect
             17A InvalidateRect
              B7 EnableWindow
             291 UpdateWindow

GDI32.dll
           405000 Import Address Table
           4060DC Import Name Table
                0 time date stamp
                0 Index of first forwarder reference

              37 CreateFontIndirectA
             1AF Rectangle
              4D CreateSolidBrush
              44 CreatePen
             1C7 SelectObject
              53 DeleteObject
             14F GetObjectA

実行可能ファイルによっては、無関係な情報が得られる可能性がかなりあります。関心のある関数のリストが既にあるので、これをフィルタリングして必要な情報を取得し、残りを除外するのは非常に簡単です。

于 2010-04-06T18:50:26.897 に答える