【问题标题】:.Net DLL vs C++ DLL.Net DLL 与 C++ DLL
【发布时间】:2012-05-17 11:20:28
【问题描述】:

如何在不查看代码的情况下区分 .NET DLL 和 C++ dll。从任何 PE 文件浏览器查看 DLL 后,我们可以通过查看导出表或 DLL 的其他部分来识别它吗?

【问题讨论】:

  • 尝试使用反射 (.NET) 调用 .dll 如果抛出异常(捕获它们),那么很可能是 C++(如果这是您仅有的两种可能性)。然后尝试 PInvoke 和 C++ 方法。
  • 缺少您的定义,.NET 程序集可以包含本机 C++ 代码。

标签: c++ .net dll


【解决方案1】:

你也许可以使用corflags

对于我得到的 .NET c# DLL

Microsoft (R) .NET Framework CorFlags 转换工具。版本 4.0.30319.1 版权所有 (c) 微软公司。保留所有权利。

版本:v4.0.30319 CLR 标头:2.5 聚乙烯:PE32 CorFlags : 1 仅 : 1 32位:0 签名:0

对于我得到的 C++ DLL

corflags : 错误 CF008 : 指定的文件没有有效的托管标头

**** 更新 ****

我可能误解了这个问题。这是一个关于类似问题的好问题。 How can I test a Windows DLL file to determine if it is 32 bit or 64 bit?

【讨论】:

    【解决方案2】:

    事实上,通过查看图像文件可以清楚地表明这一点,并由Portable Executable format specification 记录。如果 Directory[IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR] 存在(不是 EMPTY),则图像是托管的 (.NET),否则图像是非托管的。

    【讨论】:

    • 你也可以看看导入库表,因为 .NET 镜像只导入 mscoree.dll
    • 图像未被管理的事实并没有告诉您它是使用 C++ 构建的。这是另一个故事。这可以使用 PE 标头的其他字段来检测...
    猜你喜欢
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多