作者:易立 | 腾讯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 代码(通过任意平台编译)。
2、为了更好的对比效果,大部分测试payload均使用msf的windows/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.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.
生成的文件在系统中是如何运行起来的?其机制和使用传统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,在经过相应的编译器编译之后,所生成的程序集就是由
即时编译器JIT(Just-In-Time,简称JIT ):负责将中间代码MSIL翻译成本机执行代码(MSIL to Native Code)。...无论使用哪种语言来编写源代码,都会通过编译器编译成中间代码MSIL(Microsoft Intermediate Language)。...Microsoft中间语言(MSIL),也称为通用中间语言(CIL/IL:Common Intermediate Language),是一组与平台无关的指令,在CLR中运行时由JIT按需编译为机器码执行...下图为一个打印hello world的IL代码,通过内置工具ildasm可以查看。...Core CLR 是一个跨平台的运行时,移植了 .NET Framework 的 CLR 的功能,包含核心程序库 mscorlib、JIT 编译器、垃圾收集器 (GC) 以及其他运行 MSIL 所需要的运行期环境
如果你创建的语言甚至不符合CTS,例如你在词汇表中加入了汉字,那不好意思,你创建的语言不能叫英语。 很明显,CLS是CTS的一个子集,而且是最小的子集。(最小功能集) 图片来自CLR via C#。...2.1 什么是IL(CIL)?如何获得IL代码? 在.NET的开发过程中, IL的官方术语是MSIL或CIL(Common Intermediate Language,即公共中间语言)。...因此,IL,MSIL和CIL指的是同一种东西。 当使用支持.NET的编译器编译之后,生成.dll或.exe文件。这文件称作.NET程序集,包含IL和元数据。...不同语言(例如C#和VB)经过不同编译器(例如C#编译器和VB编译器),编译一段功能相似的代码(区别仅仅在于语法),其IL也基本相似。虽然IL相对C#较为底层,但它仍然是一个十分高级的语言。...使用调试器会造成JIT编译器在Debug模式进行编译,它生成未优化的代码,目的是方便你进行单步调试。如果是选择了x86的Release模式进行编译: 它将会生成被CLR优化的代码。
CLI包括了公共类型系统(CTS)、公共中间语言(CIL)、底部文件格式以及元数据格式等。 CLR(公共语言运行库) CLR是一个CLI的实现,包含了.NET运行引擎和符合CLI的类库。...尽管有很多语言本身不符合CTS规范,但是通过加强编译器,改变语言附加规范等手段,使得许多语言能够编写出能在CLR上运行的程序。...C# 以及 CLR 之上的其他语言的内存都是通过垃圾回收器回收的。...接下来编译器将代码编译成微软的中继语言(MSIL)。执行的时候CLR会将MSIL码转换为操作系统的原生码(Native code)。CLR内置有即时编译器。...执行程序集的代码。 生成本地代码。 优点 它通过在运行时提供程序之间提供丰富的交互来提高性能。 通过消除在支持程序的任何操作系统上重新编译程序的需要来增强可移植性。
只要遵从CLI,可以使用任何语言来开发程序(例如c#,c++),当然,这些语言需要符合CLS。程序开发好后编译器会将其编译为CIL(通用中间语言)。...这个中间语言就牛X了,不管是什么语言开发的程序,编译后的CIL都是一样的,所以这也为不同语言的协作提供了方便。...比如c++用来做数学运算比较方便,效率较高,大可以使用c++来编写数学计算的类库,然后在c#里调用这个类库。这便是向上无关性。 再来看看ms怎么实现向下无关性的。...上面说了,程序编译的结果是CIL,那么在运行时,更具不同的平台,编译器只需要将CIL装换为相应的本地代码就能运行了。...CLR的主要功能 : 管理代码的执行 提供通用类型系统 提供系统服务 NetFrameWork程序的运行过程 编写代码à编译成中间语言MSIL(Microsoft Intermediate Language
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#世界中用于声明变量不可以重新赋值的关键字),这是compiler的bug...在Scala中被声明为val的v2为什么在反编译的C#中不是readonly的呢? 为什么反编译出来的C#代码中的实例级公开方法都是标有override的呢? 为什么呢?为什么呢?为什么呢?
系列目录 【已更新最新开发文章,点击查看详细】 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
在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开始学习会有点疑惑,我当前使用的是什么版本的语法更或者说一切有强迫症的小伙伴总觉得不是从这个语言诞生之初了解到现在一共出了哪些新特性就感觉差点什么的话看下面官方的地址可以缓解这个症状
C# 是一种语言,用于生成面向.NET Framework 环境的代码,但他本身不是.NET 的一部分 .NET 体系结构(如何实现支持多语言、跨平台)与VS 安装 .MET 体系结构 - .NET....NET 是如何实现多语言、跨平台的?...- .NET 应用程序执行时不是直接编译成本机代码,而是被编译成Microsoft 中间语言(MSIL),然后中间语言交由公共语言运行库(CLR)执行,CLR 的实时编译器(JIT)根据本机的硬件...深入理解程序 - 为什么引入命名空间? - 深入理解Console.WriteLine("Hello world!")...可以通过 MSIL 查看工具 ildasm.exe 查看 - Dil 文件:编译后生成的动态链接库文件,里面也是 IL 指令 Pdb 文件:Porgram Debug DataBase(程序调试数据库
简单讲,编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。...一个现代编译器的主要工作流程:源代码 (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树就会变成数字+字符+字母的中间状态组合 二·为什么你需要学习编译技术
所以小的给各位看官们准备了高价值Python学习视频教程及相关电子版书籍,欢迎前来领取! 学习Python需要安装什么软件呢?也许你是一位编程小白,还不知道如何如何安装Python软件和开发环境。...集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。 所有具备这一特性的软件或者软件套(组)都可以叫集成开发环境。...例如,许多人在设计网站时使用IDE(如HomeSite、DreamWeaver等),因为很多项任务会自动生成。...对于C#、VB等高级语言而言,此时编译器完成的功能是把源码(SourceCode)编译成通用中间语言(MSIL/CIL)的字节码(ByteCode)。...Python其实和其他的编程语言还有点不太一样,它是一种脚本语言,就如同MATLAB语言一样,我们也可以管它叫解释型语言吧。
面向 .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
集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。 所有具备这一特性的软件或者软件套(组)都可以叫集成开发环境。...例如,许多人在设计网站时使用IDE(如HomeSite、DreamWeaver等),因为很多项任务会自动生成。...编译器: 简单讲,编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。...对于C#、VB等高级语言而言,此时编译器完成的功能是把源码(SourceCode)编译成通用中间语言(MSIL/CIL)的字节码(ByteCode)。...其实在安装Python开发环境的时候,就已经自带了一个编辑器,叫IDLE,不过老实讲,这个编辑器用起来真的不是很舒服,尤其是编辑比较庞大的工程的时候。
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个步骤,具体过程见下图。 ?
Mono 跨平台 IL Intermediate Language,中间语言,面向对象的汇编语言 工作流 通过C#编译器mcs,将C#编译为IL(中间语言,byte code) 通过Mono运行时中的编译器将...IL编译成对应平台的原生码 IL三种转译方式 即时编译(Just in time,JIT):程序运行过程中,将CIL的byte code转译为目标平台的原生码。...提前编译(Ahead of time,AOT):程序运行之前,将.exe或.dll文件中的CIL的byte code部分转译为目标平台的原生码并且存储,程序运行中仍有部分CIL的byte code需要JIT...IOS不支持jit编译原因 机器码被禁止映射到内存,即封存了内存的可执行权限,变相的封锁了jit编译方式 托管代码 c#代码生成的IL编码,由虚拟机的JIT编译执行,其中对象无须手动释放,由GC管理 非托管代码...: Mono将c#翻译成IL IL2CPP得到IL转变为C++代码 再由各个平台C++编译器编译成可执行机器码
通过解读编译原理、托管代码、CLI标准等核心概念,清晰呈现了这对技术组合如何从单一Windows平台演进为今日跨平台、开开源的现代开发现实。这不仅是一段命名史,更是理解微软技术生态演进的关键窗口。...微软从1998年12月开始了COOL项目,直到2000年2月,COOL被正式更名为C#。为什么叫C#?音乐爱好者可能知道,“#”在音乐中表示升调,读作“Sharp”。...编译的魔法:从源代码到运行理解C#和.NET关系的核心,在于理解它们的编译过程:当你用C#编写代码时,C#编译器并不会直接生成机器码。...相反,它生成一种叫做CIL(CommonIntermediateLanguage,公共中间语言)的中间代码,这些代码被打包在程序集(可执行文件或DLL)中。...直到程序运行时,.NET框架的CLR(CommonLanguageRuntime,公共语言运行时)才会通过JIT(Just-In-Time,即时)编译器,将需要的CIL代码编译成本机机器码。
系列目录 【已更新最新开发文章,点击查看详细】 在我的博客《.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/ 系列目录 【已更新最新开发文章,点击查看详细】