【问题标题】:Get user imported DLLs from DLL import table从 DLL 导入表中获取用户导入的 DLL
【发布时间】:2011-06-17 08:59:49
【问题描述】:

如果它所依赖的所有 DLL 都存在,我需要检查给定的 dll。我能够使用此问题中给出的代码获取 DLL 列表:How to programatically read native DLL imports in C#?。它给出了 DLL 的列表,包括系统的(如 kernel32.dll 和其他)。我需要的是从这个列表中删除它们,因为我不需要检查它们,我只需要检查开发人员显式导入的 DLL。

有什么想法吗?

【问题讨论】:

    标签: c# interop dllimport


    【解决方案1】:

    Windows DLL 和“常规”DLL 之间没有任何区别。程序员实际上确实显式地创建了对它们的依赖,这不是偶然发生的。而且您确实必须检查它们,它可能需要一个 DLL,也就是说,仅在更高版本的 Windows 上可用。

    更严重的是,您的方法在很多方面都无法可靠地工作。例如,您永远无法弄清楚它何时使用 Windows 并行缓存中的 DLL。您无法合理地进入解析清单的业务。 DLL 对其他 DLL 具有动态依赖项而不是您从 IAT 逆向工程的静态依赖项也很常见。例如,对于 COM 以及 .NET 程序集都是如此。

    只有一种好方法可以确定所需的 DLL 是否存在。加载 DLL。

    【讨论】:

    • 谢谢。加载所需的 dll 非常适合我的需求。但是,有什么方法可以在不搜索目录的情况下获取所需 dll 所在的路径?
    • 是的,这条路就是你撞墙的地方。 MSDN Library 在 SetDllDirectory 一文中提供了一些关于 Windows 如何搜索 DLL 的文档。但这不能处理基于清单的激活或动态 DLL 加载的情况。如今,两者都很常见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    相关资源
    最近更新 更多