如何检查DLL以获取信息

时间:2013-02-23 00:44:16

标签: c++ windows dll exe

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

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

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:0)

来自Heaventools Software的 PE Explorer

  

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

具体请参阅DLL Export Viewer页面了解更多详情。