如何获取已使用的DLL列表?

时间:2014-01-17 07:23:08

标签: delphi dll delphi-xe2 dll-injection

我想从应用程序本身获取已使用的DLL列表。 我的目标是将列表与硬编码列表进行比较,以查看是否注入了任何DLL。 我在谷歌找不到任何例子。

3 个答案:

答案 0 :(得分:9)

您可以使用PSAPI。您需要的功能是EnumProcessModules。有一些sample code on MSDN

主要替代方案是Tool Help库。它是这样的:

  • 致电CreateToolhelp32Snapshot
  • 使用Module32First开始枚举。
  • 反复拨打Module32Next
  • 完成后,请致电CloseHandle以销毁快照。

就个人而言,我更喜欢Tool Help来完成这项任务。这是一个非常简单的例子:

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows, TlHelp32;

var
  Handle: THandle;
  ModuleEntry: TModuleEntry32;
begin
  Handle := CreateToolHelp32SnapShot(TH32CS_SNAPMODULE, 0);
  Win32Check(Handle <> INVALID_HANDLE_VALUE);
  try
    ModuleEntry.dwSize := Sizeof(ModuleEntry);
    Win32Check(Module32First(Handle, ModuleEntry));
    repeat
      Writeln(ModuleEntry.szModule);
    until not Module32Next(Handle, ModuleEntry);
  finally
    CloseHandle(Handle);
  end;
  Readln;
end.

答案 1 :(得分:1)

安装Jedi代码库(http://jcl.sf.net

它有一个例外报告对话框,其中包括堆栈跟踪,Windows /硬件简介,以及 - 加载的DLL及其版本的列表。您可以复制或调用该部分,从中生成此列表。

答案 2 :(得分:0)

如果您需要非程序化解决方案,只需在Dependency Walker下运行该应用。

它不仅会显示静态依赖关系,还会在运行时捕获和跟踪模块的动态加载,并让您知道哪个模块名为LoadLibrary