2

我有一长串我的程序所做的所有调用。我需要知道的是每个调用属于哪个 DLL。我怎么会发现这个?

谢谢,

4

2 回答 2

2

嗯...你的标题和你的问题指向不同的东西。系统调用意味着非常具体的东西,对操作系统内核的调用(那些不在dll 中)。

碰巧的是,Windows 不会直接公开这些 API,而是在系统 DLL 中公开 API,这些 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 回答