私が持っているプログラムが行うすべての呼び出しの長いリストがあります。私が知る必要があるのは、各呼び出しがどの DLL に属しているかです。どうすればこれを見つけることができますか?
ありがとう、
私が持っているプログラムが行うすべての呼び出しの長いリストがあります。私が知る必要があるのは、各呼び出しがどの DLL に属しているかです。どうすればこれを見つけることができますか?
ありがとう、
うーん...あなたのタイトルとあなたの質問は別のものを指しています。syscalls は、非常に具体的なもの、OS カーネルへの呼び出しを意味します (これらはdll にはありません)。
たまたま、Windows はそれらを直接公開するのではなく、syscall 自体を呼び出す役割を担うシステム DLL 内の API を公開します。
では、実際にはシステムコールのリストではなく、呼び出しのリストがあるとしましょう。このリストはバイナリから生成されていますか? バイナリには、実際には依存する dll のリストがあり、実際には、dumpbin /imports binary.exe
あなたが求めているものを正確にリストします。
実行可能ファイルを考えると、最も簡単な方法はおそらく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
実行可能ファイルによっては、無関係な情報が得られる可能性がかなりあります。関心のある関数のリストが既にあるので、これをフィルタリングして必要な情報を取得し、残りを除外するのは非常に簡単です。