我怎么知道系统调用属于哪个DLL?

时间:2010-04-06 18:40:03

标签: windows winapi dll system-calls

我有一个很长的列表,列出了我所拥有的所有程序。我需要知道的是每个调用属于哪个DLL。我怎么能找到这个?

谢谢,

2 个答案:

答案 0 :(得分:2)

哼...你的头衔和你的问题指向不同的东西。 syscalls意味着一些非常具体的东西,一个对OS内核的调用(那些在dll中不是)。

实际上,Windows不会直接暴露这些,而是​​暴露系统DLL中的API,这些API负责自己调用系统调用。

因此,假设您实际上没有系统调用列表,而是一个调用列表。这个列表是从二进制文件生成的吗?二进制文件实际上有一个他们依赖的dll列表,而dumpbin /imports binary.exe实际上会准确列出你要求的内容。

答案 1 :(得分: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

根据您的可执行文件,您将获得更多无关信息。既然你已经有了一个你关心的函数列表,那么过滤它就可以很容易地得到你需要的信息而忽略了其余部分。