gpt4 book ai didi

c# - Exe 编程语言标识

转载 作者:太空狗 更新时间:2023-10-29 23:50:30 25 4
gpt4 key购买 nike

继续我的课project ,我需要识别示例 exe 的编程语言。以下是我对exe的了解:

  1. 使用 x86 .Net 4.0 框架 - 它通过 JetBrains 引用 mscorlib dotPeek程序。
  2. 有一个带有 win32 按钮和标签的 Win32 gui - 根据 UI Verify 上的框架 ID (仍在使用旧版本)。我针对 WPF 和 WinForm 示例 exe 测试了 UI Verify 框架 ID。

起初我假设它是一个 C++/CLI 项目,但我也发现了对 System.Windows.Forms 的引用和可以反编译为 C# 的方法。

这个exe是用什么编程语言写的?


更新 1:根据@xanatos 的建议,我使用 ILSpy 发现 exe 是“混合 + native 代码”。我还注意到它引用了 Microsoft.VisualC 。


更新 2:对于我的引用和其他可能需要帮助来识别 .net 引用的 exe 的人,我做了以下操作:

  1. 通过 JetBrains 或 ILSpy 验证 exe 引用 .Net (.mscorlib)
  2. 检查 GUI 及其控件以帮助识别框架 ID通过 UI 验证
  3. 检查 .corflags 以确定它是 ILOnly 还是混合通过ILSpy 的 IL View
  4. 通过 ILSpy 识别 exe 的入口点(我不得不将其更改为 C#查看并选择 exe)
  5. 通过 ILSpy 检查入口点方法是否有 hidebysig(我点击了入口点,它将我重定向到该方法,然后我更改了 View 回到伊利诺伊州)

最佳答案

我通过在 Visual Studio 中创建一些空的控制台应用程序做了一些实验。

C#:

C# 程序中没有什么特别的。很“朴素”。没有对其他程序集的奇怪引用。空应用仅引用 mscorlib。 Main方法是 hidebysig。

VB.NET:

即使是空的控制台应用程序也有对 Microsoft.VisualBasic 的引用. (assemblynamespace).My 中定义了很多东西在(assemblynamespace).My.Resources . Main方法不是 hidebysig。

F#:

即使是几乎空的 Consol 应用程序也有对 FSharp.Core 的引用. Main方法不是 hidebysig。

带有/clr 的 C++/CLI:

<CppImplementationDetails>中有类在<CrtImplementationDetails> namespace 。 ILSPY 中显示了对 kernel32.dll 的引用。启动方式为internal unsafe static int mainCRTStartupStrArray(string[] arguments) .它不是 hidebysig .

带有/pure 的 C++/CLI:

<CppImplementationDetails>中有类在<CrtImplementationDetails> namespace 。 ILSPY 中显示了对 kernel32.dll 的引用。启动方式为internal unsafe static int mainCRTStartupStrArray(string[] arguments) .它不是 hidebysig .

带有/safe 的 C++/CLI:

类外的方法在 internal class <Module> 中定义. main (小写)方法不是 hidebysig。

ILAsm:

未测试,但非常确定可以生成任何纯 IL 代码

其他语言:

您可以经常查看引用的程序集。为 .NET 编译的语言通常有一些额外的程序集,其中包含针对它们的特殊类(如 VB.NET Microsoft.VisualBasic

-

请注意,如果 exe 是“纯”IL 代码,则应该有一个

.corflags 0x00000001//ILOnly

如果是混合原生 + ILCode 代替:

.corflags 0x00000000//0

我可以通过在 ILSPY 中加载 exe,选择它并在工具栏的组合框中选择 IL 来查看它。这是最后一行

起初我假设它是一个 C++/CLI 项目,但我也发现了对 System.Windows.Forms 的引用和可以反编译为 C# 的方法。

使用 C++/CLI 或 C# 并使用 System.Windows.Forms是正交的。您可以将任何 .NET 语言与 System.Windows.Forms 结合使用.最大的区别在于,使用 C++/CLI,您可以在 exe 中放入非 IL 代码和 IL 代码,而使用 C#,您只能生成 IL 代码。

关于c# - Exe 编程语言标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29703669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com