【发布时间】:2011-06-17 08:59:49
【问题描述】:
如果它所依赖的所有 DLL 都存在,我需要检查给定的 dll。我能够使用此问题中给出的代码获取 DLL 列表:How to programatically read native DLL imports in C#?。它给出了 DLL 的列表,包括系统的(如 kernel32.dll 和其他)。我需要的是从这个列表中删除它们,因为我不需要检查它们,我只需要检查开发人员显式导入的 DLL。
有什么想法吗?
【问题讨论】:
如果它所依赖的所有 DLL 都存在,我需要检查给定的 dll。我能够使用此问题中给出的代码获取 DLL 列表:How to programatically read native DLL imports in C#?。它给出了 DLL 的列表,包括系统的(如 kernel32.dll 和其他)。我需要的是从这个列表中删除它们,因为我不需要检查它们,我只需要检查开发人员显式导入的 DLL。
有什么想法吗?
【问题讨论】:
Windows DLL 和“常规”DLL 之间没有任何区别。程序员实际上确实显式地创建了对它们的依赖,这不是偶然发生的。而且您确实必须检查它们,它可能需要一个 DLL,也就是说,仅在更高版本的 Windows 上可用。
更严重的是,您的方法在很多方面都无法可靠地工作。例如,您永远无法弄清楚它何时使用 Windows 并行缓存中的 DLL。您无法合理地进入解析清单的业务。 DLL 对其他 DLL 具有动态依赖项而不是您从 IAT 逆向工程的静态依赖项也很常见。例如,对于 COM 以及 .NET 程序集都是如此。
只有一种好方法可以确定所需的 DLL 是否存在。加载 DLL。
【讨论】: