要继续我的课程项目,我需要识别示例exe的编程语言.以下是我对exe的了解:
起初我假设它是一个C++/CLI项目,但我也发现了一个对System.Windows.Forms的引用和可以反编译为C#的方法.
这个exe编写的编程语言是什么?
更新1:使用ILSpy,我发现exe是"混合+本机代码",根据@xanatos建议.我也注意到它引用了Microsoft.VisualC.
更新2:至于我的参考以及可能需要帮助来识别.net引用的exe的其他人,我做了以下事情:
.corflags通过ILSpy的IL视图检查以确定它是ILOnly还是混合hidebysig通过ILSpy(我点击了入口点,它将我重定向到方法,然后我将视图更改回IL)我已经通过在Visual Studio中创建一些空的控制台应用程序做了一些实验.
C#:
C#程序没有什么特别之处.这非常"平淡".其他组件没有奇怪的参考.空应用程序仅引用mscorlib.该Main方法是hidebysig.
VB.NET:
即使是空的控制台应用程序也有引用Microsoft.VisualBasic.在里面(assemblynamespace).My和里面定义了很多东西(assemblynamespace).My.Resources.该Main方法不是 hidebysig.
F#:
即使是几乎空的Consol App也有参考FSharp.Core.该Main方法不是 hidebysig.
带/ clr的C++/CLI:
命名空间<CppImplementationDetails>和<CrtImplementationDetails>命名空间中都有类.ILSPY中显示了对kernel32.dll的引用.启动方法是internal unsafe static int mainCRTStartupStrArray(string[] arguments).事实并非如此hidebysig.
C++/CLI with/pure:
命名空间<CppImplementationDetails>和<CrtImplementationDetails>命名空间中都有类.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代码.
| 归档时间: |
|
| 查看次数: |
593 次 |
| 最近记录: |