首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何查看C#编译器生成的MSIL/CIL?为什么叫组装?

查看C#编译器生成的MSIL/CIL可以通过使用.NET框架提供的工具ILDASM(Intermediate Language Disassembler)。ILDASM是一个命令行工具,可以将MSIL/CIL代码反编译为易于阅读的C#源代码。

首先,确保已经安装了.NET框架。然后,打开命令提示符或PowerShell,并导航到ILDASM的安装目录。通常,ILDASM位于以下目录中:

代码语言:txt
复制
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\

接下来,使用ILDASM工具打开要查看的程序集。例如,如果要查看名为“MyAssembly.dll”的程序集,可以运行以下命令:

代码语言:txt
复制
ildasm MyAssembly.dll

这将打开ILDASM GUI,并显示程序集的MSIL/CIL代码。可以使用ILDASM的“Tree View”或“Text View”来查看代码。

为什么叫组装?

MSIL/CIL代码是C#编译器生成的中间代码,它类似于汇编语言。因此,将MSIL/CIL代码与汇编语言进行对比,可以更好地理解为什么它被称为“组装”。汇编语言是一种低级程序设计语言,它使用助记符和符号来表示计算机硬件的操作码和寄存器。与汇编语言类似,MSIL/CIL代码也是一种低级语言,它为.NET虚拟机提供了一组指令,用于执行程序。因此,将MSIL/CIL代码称为“组装”是有道理的,因为它类似于汇编语言,并且是.NET虚拟机执行的基础。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C#如何执行

作者:易立 | 腾讯IEG高级工程师 为什么 Unity3D 可以运行 C#C# 和 Mono 是什么关系,Mono 和 .Net Framework 又是什么关系?我们深入来聊一聊这个话题!...C# 和 Java 类似,C# 会编译成一个中间语言(CIL,Common Intermediate Language,也 MSIL),CIL 也是一个高级语言,而运行 CIL 虚拟机 CLR(Common...运行 C# 通过编译器编译后生成 IL 代码。...小结 C# 在 Windows 下,是通过微软 C# 编译器生成了 IL 代码,运行在 CLR 中。...C# 在除 Windows 外平台下,是通过 Mono 编译器生成了 IL 代码,运行在 Mono 虚拟机中,也可以直接运行将已经编译好 IL 代码(通过任意平台编译)。

4.9K113

远控免杀专题(13)-zirikatu免杀(VT免杀率3971)

2、为了更好对比效果,大部分测试payload均使用msfwindows/meterperter/reverse_tcp模块生成。...---- 一、zirikatu介绍 zirikatu是一个用bash编写小脚本,依赖于msf、mono、mcs等软件,也是调用msfvenom生成shellcode,然后将shellcode嵌入C#代码...从Mono2.11版本开始,采用编译器mcs,它作用是将C#编译为CIL(Common Language Infrastructure,通用中间语言,也MSIL微软中间语言,这个语言能运行在所有支持...CIL环境中) 二、安装zirikatu 下载到本地 git clone https://github.com/pasahitz/zirikatu.git 三、zirikatu使用说明 执行命令 chmod...四、生成后门 还是使用最常规reverse_tcp进行测试,选项都比较简单,默认填写就可以 ?

1.9K20
  • C#图解教程第一章 C#和.NET框架

    1.1 在.NET之前  C#发音:see shap  1.1.1 20世纪90年代后期Windows编程   20世纪90年代后期各语言缺点:    1.纯Win32 API不是面向对象,而且工作量比...兼容编译器(例如:C#,VB.JScript和托管C++)     调速器     服务器端改进,比如ASP.NET   BCL(是.NET框架使用一个大类库):    Base Class Library...Language,公共中间语言)   程序集包含:    CIL    使用类型元数据    对其他程序引用元数据    CIL术语:     IL/MSIL  1.4 编译成本机代码并执行   ...程序CIL调用时才会被编译   CLR执行步骤:    检查程序集安全特性    在内存中分配空间    可执行代码发送给实时编译器,把其中一部分编译成本机代码   不被调用代码不会被编译成本机代码...   详细说明了一个.NET兼容编程语言规范,属性和行为    其主题包括数据类型,类结构和参数传递 1.7 缩写  1.程序集   公共中间语言:    CIL    IL    MSIL  2.

    1.2K110

    .Net 框架

    生成文件在系统中是如何运行起来?其机制和使用传统VC++生成可执行文件是否相同?...那么采用C#编译器生成文件又是什么呢?现在需要引入程序集这个概念:在.NET框架下,类似C#这样高级语言经过编译后生成结果文件被称做程序集,其后缀名是.dll(类库)或.exe(可执行程序)。...Console.WriteLine(text) EndSub EndModule 现在,需要一个工具来查看这个程序集内容,并且与C#项目生成程序集进行对比。...CIL最初是随着.NET由微软一起发布,因此之前也叫做MSIL(Microsoft Intermediate Language),后来进行了标准化,之后便被称做CIL。...因为不论是C#语言也好,VB.NET语言也好,C++/CLI语言也好,甚至是重新开发一套以自己名字缩写命名语言,只要它期望运行目标平台是.NET,在经过相应编译器编译之后,所生成程序集就是由

    1.9K21

    .NET 体系概览图集- 2024 最全总结

    即时编译器JIT(Just-In-Time,简称JIT ):负责将中间代码MSIL翻译成本机执行代码(MSIL to Native Code)。...无论使用哪种语言来编写源代码,都会通过编译器编译成中间代码MSIL(Microsoft Intermediate Language)。...Microsoft中间语言(MSIL),也称为通用中间语言(CIL/IL:Common Intermediate Language),是一组与平台无关指令,在CLR中运行时由JIT按需编译为机器码执行...下图为一个打印hello worldIL代码,通过内置工具ildasm可以查看。...Core CLR 是一个跨平台运行时,移植了 .NET Framework CLR 功能,包含核心程序库 mscorlib、JIT 编译器、垃圾收集器 (GC) 以及其他运行 MSIL 所需要运行期环境

    95510

    .NET面试题系列 - .NET框架基础知识(1)

    图片来自CLR via C#。 1.5 为什么说.NET是平台无关? .NET程序集可以在非微软操作系统如Mac OS,各种版本Linux,以及iOS和Android移动设备上开发和执行。....2.1 什么是IL(CIL)?如何获得IL代码? 在.NET开发过程中, IL官方术语是MSILCIL(Common Intermediate Language,即公共中间语言)。...因此,IL,MSILCIL指的是同一种东西。 当使用支持.NET编译器编译之后,生成.dll或.exe文件。这文件称作.NET程序集,包含IL和元数据。...不同语言(例如C#和VB)经过不同编译器(例如C#编译器和VB编译器),编译一段功能相似的代码(区别仅仅在于语法),其IL也基本相似。虽然IL相对C#较为底层,但它仍然是一个十分高级语言。...使用调试器会造成JIT编译器在Debug模式进行编译,它生成未优化代码,目的是方便你进行单步调试。如果是选择了x86Release模式进行编译: ? 它将会生成被CLR优化代码。

    1.7K10

    C# Personal Handbook】运行环境

    CLI包括了公共类型系统(CTS)、公共中间语言(CIL)、底部文件格式以及元数据格式等。 CLR(公共语言运行库) CLR是一个CLI实现,包含了.NET运行引擎和符合CLI类库。...尽管有很多语言本身不符合CTS规范,但是通过加强编译器,改变语言附加规范等手段,使得许多语言能够编写出能在CLR上运行程序。...C# 以及 CLR 之上其他语言内存都是通过垃圾回收器回收。...接下来编译器将代码编译成微软中继语言(MSIL)。执行时候CLR会将MSIL码转换为操作系统原生码(Native code)。CLR内置有即时编译器。...执行程序集代码。 生成本地代码。 优点 它通过在运行时提供程序之间提供丰富交互来提高性能。 通过消除在支持程序任何操作系统上重新编译程序需要来增强可移植性。

    44340

    Scala中语言特性是如何实现

    Scala中语言特性是如何实现(1) Scala可以编译为Java bytecode和CIL,从而在JVM和CLI之上运行。...Scala有很多在Java和C#世界中显得陌生语言特性,本文将分析这些语言特性是如何实现。...编译器为v1生成了getter和setter,为v2则只有getter,因为v2作为immutable字段是不可以被重新赋值。 有趣是方法中局部变量都是普通变量,没有被final修饰。...再来看这段Scala编译为CIL再反编译为C#之后样子: image.png 有一个明显问题,v2没有标为readonly(C#世界中用于声明变量不可以重新赋值关键字),这是compilerbug...在Scala中被声明为valv2为什么在反编译C#中不是readonly呢? 为什么反编译出来C#代码中实例级公开方法都是标有override呢? 为什么呢?为什么呢?为什么呢?

    1K70

    C#温故而知新—闲话.Net

    只要遵从CLI,可以使用任何语言来开发程序(例如c#,c++),当然,这些语言需要符合CLS。程序开发好后编译器会将其编译为CIL(通用中间语言)。...这个中间语言就牛X了,不管是什么语言开发程序,编译后CIL都是一样,所以这也为不同语言协作提供了方便。...比如c++用来做数学运算比较方便,效率较高,大可以使用c++来编写数学计算类库,然后在c#里调用这个类库。这便是向上无关性。 再来看看ms怎么实现向下无关性。...上面说了,程序编译结果是CIL,那么在运行时,更具不同平台,编译器只需要将CIL装换为相应本地代码就能运行了。...CLR主要功能 : 管理代码执行 提供通用类型系统 提供系统服务 NetFrameWork程序运行过程 编写代码à编译成中间语言MSIL(Microsoft Intermediate Language

    66980

    .NET6 平台系列3 .NET CLR 详解

    系列目录 【已更新最新开发文章,点击查看详细】 CLR 简介   运行时(Runtime Environment,简称Runtime ),是指那些支持在特定平台上,用于运行特定编程语言编写软件库和程序集...编译过程 (1)编译器首先将各类.NET 上支持语言(C#、VB.NET、VC++等)编写源代码编译托管中间语言(MSIL)代码,不是机器码。...在编译器将源代码编译成MSIL同时,元数据引擎也产生元数据信息,这些代码也可和其他语言编译代码链接为一个EXE或DLL文件(通过链接器实现)。 (2)由于本地CPU不能直接执行MSIL指令。...也就是说,.NET下源程序(C#等)并不被编译成目标文件(.obj),而是直接生成可执行文件(.exe)或动态链接库(.dll)。在.NET下,编译器不需要包含链接器。...系列目录 【已更新最新开发文章,点击查看详细】 技术栈 1、.NET:C#、.NET5、.NET6、.NET Core、MVC、ASP.NET Core、Web API、RESTful

    2.6K21

    简单介绍.NET

    在CLR之下,可能会有几个子组件,例如: JIT编译器:负责将中间语言(CIL)转换成特定平台上机器语言。 垃圾收集器:负责自动管理内存,回收不再使用对象。...1.4 IL IL(Intermediate Language)是.NET Framework中一种中间语言,也被称为CIL (Common Intermediate Language) 或 MSIL...IL是一种面向堆栈计算机指令集,设计用于由具有高级语言特性编程语言生成,并可进一步由JIT(Just-In-Time)编译器在运行时转换为本地代码。...更有效资源使用:AOT编译通常会生成更小应用程序,并且它们通常在运行时使用更少内存,因为不需要额外资源来存储和运行JIT编译器。...1.7 C#语言历史 如果是中途转语言到C#或者C#小白从0开始学习会有点疑惑,我当前使用是什么版本语法更或者说一切有强迫症小伙伴总觉得不是从这个语言诞生之初了解到现在一共出了哪些新特性就感觉差点什么的话看下面官方地址可以缓解这个症状

    27630

    杂谈-为什么要学编译技术

    简单讲,编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”程序。...一个现代编译器主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker...对于C#、VB等高级语言而言,此时编译器完成功能是把源码(SourceCode)编译成通用中间语言(MSIL/CIL字节码(ByteCode)。...int main printf hello world 传入参数 int 主函数入口 main 函数printf 打印hello world 然后生成抽象语法树: 3f53e82a3b2714f99d97f0e66d01c7fb.jpg...N取决于高级语言有多少种关键字比如 c语言: void printf int float go语言: go for := 那么上述AST树就会变成数字+字符+字母中间状态组合 二·为什么你需要学习编译技术

    83900

    零基础初学Python,需要装什么软件?

    所以小给各位看官们准备了高价值Python学习视频教程及相关电子版书籍,欢迎前来领取! 学习Python需要安装什么软件呢?也许你是一位编程小白,还不知道如何如何安装Python软件和开发环境。...集成了代码编写功能、分析功能、编译功能、调试功能等一体化开发软件服务套。 所有具备这一特性软件或者软件套(组)都可以集成开发环境。...例如,许多人在设计网站时使用IDE(如HomeSite、DreamWeaver等),因为很多项任务会自动生成。...对于C#、VB等高级语言而言,此时编译器完成功能是把源码(SourceCode)编译成通用中间语言(MSIL/CIL字节码(ByteCode)。...Python其实和其他编程语言还有点不太一样,它是一种脚本语言,就如同MATLAB语言一样,我们也可以管它解释型语言吧。

    1.6K41

    .NET6 平台系列2 .NET Framework框架详解

    面向 .NET Framework 语言编译器发出名为公共中间语言 (CIL) 中间代码,反过来,通过公共语言运行时在运行时进行编译。...NET 拥有自己微软中间语言(MSIL)、元数据和清单汇编。所有的.NET语言编译器生成这种格式。...各种 Microsoft 编译器和第三方语言编译器都可生成符合 CTS 托管代码。 这意味着托管代码可在严格实施类型保真和类型安全同时使用其他托管类型和实例。   ...(2)CLR把MSIL编译为平台专用机器代码。 .NET平台支持很多语言,常见有 VB、C++、C#、F#、J#(Java)JScript等。...Windows XP 和 Windows Server 2003 系列目录 【已更新最新开发文章,点击查看详细】 技术栈 1、.NET:C#、.NET5、.NET6、.NET Core

    2.2K10

    零基础学Python编程需要安装什么软件?

    集成了代码编写功能、分析功能、编译功能、调试功能等一体化开发软件服务套。 所有具备这一特性软件或者软件套(组)都可以集成开发环境。...例如,许多人在设计网站时使用IDE(如HomeSite、DreamWeaver等),因为很多项任务会自动生成。...编译器: 简单讲,编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”程序。...对于C#、VB等高级语言而言,此时编译器完成功能是把源码(SourceCode)编译成通用中间语言(MSIL/CIL)字节码(ByteCode)。...其实在安装Python开发环境时候,就已经自带了一个编辑器,IDLE,不过老实讲,这个编辑器用起来真的不是很舒服,尤其是编辑比较庞大工程时候。

    5.7K40

    .NET平台系列7 .NET Core 体系结构详解

    Platform、采用 AOT 编译技术运行最优化包 Core RT (.NET Core Runtime),以及跨平台 MSIL 编译器 LLILC (LLVM-based MSIL Compiler...Core CLR   Core CLR 移植 .NET Framework CLR 功能,包含核心程序库 mscorlib、JIT 编译器、垃圾收集器 (GC) 以及其他运行 MSIL 所需要运行期环境...AOT优化带来不少好处: 编译后生成一个单文件,包含所有的依赖,包括 CoreRT,无需安装Framework或.NET Core。 启动时是机器码,不需要生成机器码,也不要加载JIT编译器。...默认情况下,RyuJIT 作为一个 AOT 编译器将IL编译成机器码。另一个方式是将C#代码编译成C++代码,然后调用对应平台C++编译器优化编译成机器码。...Roslyn 编译原理 Roslyn编译器用于将 C#、F#或VB.NET 代码编译为程序集(Assembly),它编译过程是一个管道式处理过程,一共包含4个步骤,具体过程见下图。 ?

    1.1K20

    Unity3d:c#,Mono,IL2CPP,托管代码,AOT,JIT

    Mono 跨平台 IL Intermediate Language,中间语言,面向对象汇编语言 工作流 通过C#编译器mcs,将C#编译为IL(中间语言,byte code) 通过Mono运行时中编译器将...IL编译成对应平台原生码 IL三种转译方式 即时编译(Just in time,JIT):程序运行过程中,将CILbyte code转译为目标平台原生码。...提前编译(Ahead of time,AOT):程序运行之前,将.exe或.dll文件中CILbyte code部分转译为目标平台原生码并且存储,程序运行中仍有部分CILbyte code需要JIT...IOS不支持jit编译原因 机器码被禁止映射到内存,即封存了内存可执行权限,变相封锁了jit编译方式 托管代码 c#代码生成IL编码,由虚拟机JIT编译执行,其中对象无须手动释放,由GC管理 非托管代码...: Mono将c#翻译成IL IL2CPP得到IL转变为C++代码 再由各个平台C++编译器编译成可执行机器码

    53910

    .NET平台系列22:.NET Core.NET5.NET6 对比 .NET Framework

    系列目录 【已更新最新开发文章,点击查看详细】   在我博客《.NET平台系列2 .NET Framework 框架详解》与 《.NET平台系列7 .NET Core 体系结构详解》 两篇文章中分别详细介绍了...NET Framework本身是一个跨平台解决方案,在这一基础上它还支持C#和VB等编程语言,且这些语言共同遵守公共语言规范( Common Language Specification 简称CLS)...,最终生成应用程序都会被编译成公共中间语言(Common Intermediate Language 简称CIL)或者MSIL(微软中间语言)执行。...下图引用微软官方帮助文档中一幅图,图中通过饼图和柱状图两种形式展示了 CoreFX 中专门针对各个操作系统(Windows、Unix、 Linux和OX)C#代码比例和代码行数,可以看到90% CoreFX...参考文献: https://devblogs.microsoft.com/dotnet/introducing-net-5/ 系列目录 【已更新最新开发文章,点击查看详细】

    1.7K10

    .NET6 平台系列3 .NET CLR 详解

    (2)即时编译器(Just-In-Time,简称JIT):负责将MSIL翻译成本机执行代码。 (3)代码管理器(Code Manager):管理代码执行。...编译过程 (1)编译器首先将各类.NET 上支持语言(C#、VB.NET、VC++等)编写源代码编译托管中间语言(MSIL)代码,不是机器码。...在编译器将源代码编译成MSIL同时,元数据引擎也产生元数据信息,这些代码也可和其他语言编译代码链接为一个EXE或DLL文件(通过链接器实现)。 (2)由于本地CPU不能直接执行MSIL指令。...当然,如果开发人员希望在应用程序首次安装到计算机中时就全部从MSIL转变为本机代码,那么可以使用 PreJIT 编译器实现,PreJIT自动把MSIL转换本机代码。...也就是说,.NET下源程序(C#等)并不被编译成目标文件(.obj),而是直接生成可执行文件(.exe)或动态链接库(.dll)。在.NET下,编译器不需要包含链接器。

    75020
    领券