Windows 记录进程加载的DLL

Windows 记录进程加载的DLL,windows,dll,profiling,Windows,Dll,Profiling,我想在单元测试中添加日志记录,记录它们使用的DLL以及从何处加载DLL 我可以从Sysinternals listdll中获得所需的信息,但我需要在测试进程运行时运行这些信息,最终会遇到竞争条件:例如,listdll可能运行得太早,并且在测试运行的中途丢失了加载的DLL;或者,在测试进程退出后,ListDLL可能运行得太晚 类似地,我可以从VisualStudio调试器的输出和模块窗口中获得所需的信息,但我希望在构建服务器上实现这一点的自动化 是否有任何命令行工具可以运行任意EXE,跟踪它使用的

我想在单元测试中添加日志记录,记录它们使用的DLL以及从何处加载DLL

我可以从Sysinternals listdll中获得所需的信息,但我需要在测试进程运行时运行这些信息,最终会遇到竞争条件:例如,listdll可能运行得太早,并且在测试运行的中途丢失了加载的DLL;或者,在测试进程退出后,ListDLL可能运行得太晚

类似地,我可以从VisualStudio调试器的输出和模块窗口中获得所需的信息,但我希望在构建服务器上实现这一点的自动化


是否有任何命令行工具可以运行任意EXE,跟踪它使用的DLL,并将信息记录到文件中?

好消息:使用迂回方式自己编写并不难。将LoadLibraryA/W函数和日志DLL名称挂接到一个文件(根据实际LoadLibrary返回的值使用GetModuleFileName)。还要钩住CreateProcess,以便可以记录子进程加载的DLL

坏消息是:我希望能够发布我使用的源代码,但这是一个我无法共享的内部工具


编辑:我不相信这个工具的迂回钩子是完全可靠的,因为在我的测试中,它丢失了一些DLL。这里有一个使用调试器API的替代工具:

您可以编写自己的工具,该工具将使用“调试”功能。必须使用此工具

  • 启动新进程已暂停
  • 作为调试器附加到已创建的进程
  • 处理调试事件,我记得,您需要加载\u DLL\u调试\u事件
  • 请注意,SysInternals(现在的MSFT:)有一个很好的工具,用于跟踪加载应用程序时发生的各种事件:Process Monitor。您必须过滤掉与正在检查的应用程序无关的任何内容。此外,您可能需要设置Operation=“Load Image”过滤器


    尝试了Tim Robinson的工具,但它似乎只跟踪与Windows相关的dll,因此在我的情况下不太有用。

    也许这对您有帮助:@Xearinox-谢谢,这与ListDLL类似。我想要一个命令行工具,在加载进程的DLL时跟踪它们,并在进程存在时编写报告。1。绕道不是免费的。2.我想,这个建议在静态链接库上失败了。谢谢@Maximus-我也这么想,并编写了我自己的工具来实现这一点: