我有一长串我的程序所做的所有调用。我需要知道的是每个调用属于哪个 DLL。我怎么会发现这个?
谢谢,
嗯...你的标题和你的问题指向不同的东西。系统调用意味着非常具体的东西,对操作系统内核的调用(那些不在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
根据您的可执行文件,您很有可能会获得更多无关信息。由于您已经有一个您关心的功能列表,因此过滤它以获取您需要的信息并忽略其余部分应该很容易。