【发布时间】:2011-02-04 22:53:30
【问题描述】:
我有一长串程序调用的列表。我需要知道的是每个调用属于哪个 DLL。我怎么会发现这个?
谢谢,
【问题讨论】:
标签: windows winapi dll system-calls
我有一长串程序调用的列表。我需要知道的是每个调用属于哪个 DLL。我怎么会发现这个?
谢谢,
【问题讨论】:
标签: windows winapi dll system-calls
嗯...你的标题和你的问题指向不同的东西。系统调用意味着一些非常具体的东西,对操作系统内核的调用(那些在 dll 中不是)。
事实上,Windows 不会直接公开这些 API,而是公开系统 DLL 中的 API,这些 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
根据您的可执行文件,您很有可能会获得更多无关信息。由于您已经有一个您关心的函数列表,因此应该很容易对其进行过滤以获取您需要的信息并忽略其余部分。
【讨论】: