如何获取已用DLL的列表? [英] How to get a list of used DLLs?
本文介绍了如何获取已用DLL的列表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想从应用程序本身获取使用的DLL的列表。
我的目标是将列表与硬编码的列表进行比较,以查看是否注入了任何DLL。
我在Google中找不到任何示例。
I would like to get a list of used DLLs from application itself. My goal is to compare the list with hardcoded one to see if any DLL is injected. I can not find any examples in Google.
推荐答案
您可以为此使用PSAPI。您需要的功能是 EnumProcessModules code>
。在MSDN上有一些示例代码。
You can use PSAPI for this. The function you need is EnumProcessModules
. There's some sample code on MSDN.
主要替代方法是工具帮助库。像这样:
The main alternative is the Tool Help library. It goes like this:
- 调用
CreateToolhelp32Snapshot
。 - 使用
Module32First
开始枚举。 - 重复调用
Module32Next
。 - 完成后,调用
CloseHandle
销毁快照。
- Call
CreateToolhelp32Snapshot
. - Start enumeration with
Module32First
. - Repeatedly call
Module32Next
. - When you are done call
CloseHandle
to destroy the snapshot.
就个人而言,我更喜欢工具帮助来完成此任务。这是一个非常简单的示例:
Personally, I prefer Tool Help for this task. Here's a very simple example:
{$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.
这篇关于如何获取已用DLL的列表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文