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