我是.NET C#编程的新手。我正在看几本书。据说不是直接将其编译为二进制代码(本机代码)。高级代码将转换为中间语言(称为MSIL,也称为CIL)。但是当我编译时,我得到一个exe / Dll文件。
- 这些MSIL / CIL是否包含在这些exe / dll文件中?
- 我想看一下中间语言代码。只是为了了解它的存在。怎么看?
- 他们称此exe / dll文件为
assembly
。他们是否使用这个“花哨的单词”只是为了将它们与包含二进制代码(本机代码)的exe / dll文件区分开?
我是.NET C#编程的新手。我正在看几本书。据说不是直接将其编译为二进制代码(本机代码)。高级代码将转换为中间语言(称为MSIL,也称为CIL)。但是当我编译时,我得到一个exe / Dll文件。
assembly
。他们是否使用这个“花哨的单词”只是为了将它们与包含二进制代码(本机代码)的exe / dll文件区分开?Answers:
.text
是在PE文件的部分中(便携式可执行文件= * .exe或* .dll)。在这里可以找到更多信息。如果我也可以推荐一本好书,那是Serge Lidin的Expert .NET 2.0 IL汇编器。他是设计MSIL的人。
在C#片段中查看IL的最喜欢的方法之一就是使用免费的LINQPad工具。输入一些代码并在顶部选择“ C#语句”(或“ C#程序”,以适当的形式)之后,单击代码输入区域下的“ IL”按钮,您将看到生成的IL。
使用LINQPad进行此操作比加载Visual Studio或从命令行运行编译器,然后加载ILDASM并使用文本编辑器打开.il文件要方便得多。
如果您想在线使用它,.NET Fiddle就是很好的选择。只需粘贴您的代码,然后单击右上角的View IL
选项。
另一个选择:使用ReSharper
在Visual Studio中:
支持源代码和IL的同步视图-单击源代码中的语句时,IL中的相应块将突出显示(反之亦然)。显示来自Microsoft Developer Network的IL的描述和来自ECMA标准规范的“通用中间语言(CIL)指令集”。
请参阅Resharper帮助中的查看中间语言(IL)。上面的图片来自Resharper帮助。
免费选项是使用Jetbrains dotPeek
另请参阅:“使用ReSharper和dotPeek探索中间语言(IL)”,Maarten Balliauw,2017年1月19日-Jetbrains 博客
在许多方面,.NET程序集与Java字节码程序包相似。
我花了几个小时寻找最好的工具,该工具可以让我直接在Visual Studio中查看IL代码。
我到目前为止发现的唯一解决方案是Msiler https://visualstudiogallery.msdn.microsoft.com/60fc53d4-e414-461b-a27c-3d5d2a53f637
效果很好!
否则,第二个最好的解决方案是JetBrains dotPeek,但没有集成Visual Studio,这实在是太棒了。
我知道这是一个古老的问题,我更喜欢上面的任何工具。但是,紧要关头,至少从2005版开始,Visual Studio的包装盒中已有MSIL查看器。
该工具名为ildasm.exe
,在默认安装Visual Studio之后位于以下文件夹中:
Visual Studio 2005”C:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\Bin\ildasm.exe"
Visual Studio 2008的“ C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\ildasm.exe
”
Visual Studio 2010 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\ildasm.exe
“
有关更多信息,请参见:MSDN Library中的“ 如何:查看程序集内容 ”。
根据我的经验,与IL相关的知识的最佳来源是Andrew Troelsen“ Pro C#和.NET平台”。从第3版开始,他在如何理解IL甚至编写自己的代码和使用ILAsm上都有非常非常出色的一章(约50页)。我已经利用这些信息来调查.NET世界中是否存在多重继承。您也可以尝试在IL中使用一些非常有趣的功能(例如,仅在VB中存在但在C#中不存在的异常过滤)。
我强烈建议您阅读该章。
最终,.NET Reflector是用于研究程序集的IL代码的企业标准,Richter的书绝对是“必读”的书。但是从上面提到的其他书籍中,您可以发现真正有用的东西:)
是的,.NET世界中的每个程序集都包含一些IL代码(以及清单),可以通过Reflector或ILDasm进行查看。甚至更多,Reflector可以向您展示C#和VB优化的代码。这意味着任何人都可以查看程序集的源代码,这就是为什么在商业产品中使用混淆器的原因。
我想查看中间语言,请尝试从Telerik下载JustDecompile(目前是免费的,但需要注册)。
拖入您的DLL,然后IL
从顶部的下拉框中选择!
现在有另一个选择。你可以做到这一点VS代码与此扩展名与罗斯林建。这是目前仅限于.NET的核心。