我需要在文件夹中处理一些dll和exe文件,并确定我正在处理的文件类型:.NET,COM,Win32或其他一些外星生命形式。
我一直在尝试确定检测DLL类型的最简单方法,你怎么看待这个:
COM dll =>我做了一个LoadLibrary,然后是“ DllRegisterServer ”的GetProcAddress。如果我得到有效的回报,那就是一个COM文件。
.NET dll =>如果dll依赖于 MSCOREE.DLL ,它总是一个.NET dll?
Win32 dll =>如果上述两个测试都失败了,那就是Win32 dll?
当然必须有更好的方法来检测我们正在处理的dll类型。以上是非常笨重的,并不适用于EXE文件?必须有一些我没想到的其他方式。
理想情况下,我希望能够让解析器确定编译文件的编译器,以及它使用的功能,如MFC,Atl,Stl等......但我怀疑在预反射中是否可行时代?
答案 0 :(得分:5)
您必须检查这些文件的PE标头。所有DLL和可执行文件,Win32和.NET都有一个PE头。
An In-Depth Look into the Win32 Portable Executable File Format
答案 1 :(得分:5)
不需要DllRegisterServer,COM dll唯一需要的导出是DllGetClassObject
答案 2 :(得分:1)
我没有看到更好的方法。然而,在2.,实际上答案是否定的。运行时主机几乎肯定也依赖于mscoree.dll,而那些不一定是.Net程序集。
.Net dll有一个COM描述符,您可以使用dumpbin找到它。我不知道如何从代码中获取这些信息。
如果您使用.Net编程,确定程序集是否为.Net程序集的一种方法是尝试调用Assembly.LoadFrom(...)。
嗯,这不是一个真正的答案,而是一系列我要研究的事情提示。