2013-02-23 42 views
3

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

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

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

回答

3

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

要找出注册表项中的DLL正在访问它,您可以:

  1. 拆机/反编译的DLL,如用IDA,并期待在所有的代码中RegOpenKeyEx()RegQueryValueEx()的地方,和其他注册表功能正在被调用。
  2. 编写一个应用程序,该应用程序将DLL加载到内存中并动态修补注册表函数导入,以便拦截输入参数值。
  3. 使用SysInternals Process Monitor,像Ben建议的那样。
3

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

0

有来自Heaventools Software的PE Explorer

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

有关更多详细信息,请参见DLL Export Viewer页面。