如何获取已用DLL的列表? [英] How to get a list of used DLLs?

查看:103
本文介绍了如何获取已用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆