3

有没有办法检查单个(C++ 编译的)DLL 文件并找出它调用的 Win32 函数?

我有MyDll.dll档案。我知道在这个 dll 中的某个地方,有一段代码正在从 Windows 注册表中检索信息。

有没有办法找出 DLL 正在访问的注册表项?

4

3 回答 3

3

您可以访问 DLL 的 PE 导入表来确定 DLL 静态链接到哪些 Win2 API 函数,但这并不能保证这些函数在 DLL 的代码中实际被调用,并且这也不考虑动态加载的 Win32 API 函数通过GetProcAddress().

要找出 DLL 正在访问哪些注册表项,您可以:

  1. 反汇编/反编译 DLL,例如使用 IDA,并查看代码中调用RegOpenKeyEx()RegQueryValueEx()和其他注册表函数的所有位置。
  2. 编写一个将 DLL 加载到内存中并动态修补注册表函数导入的应用程序,以便它可以拦截输入参数值。
  3. 像 Ben 建议的那样使用 SysInternals Process Monitor。
于 2013-02-23T01:00:18.930 回答
3

您需要执行 DLL;如果您这样做,那么 Sysinternals(现在是 Microsoft 的一部分)进程监视器将向您显示该进程进行的所有注册表访问,并捕获每个的堆栈跟踪(您可以使用它来查找从该 DLL 进行的调用)。

于 2013-02-23T00:53:23.180 回答
0

Heaventools Software有PE Explorer

导出函数列表查看器显示可能被其他应用程序调用的那些函数。

具体参见DLL 导出查看器页面了解更多详细信息。

于 2014-07-02T14:07:39.253 回答