深入C#内核 IL汇编语言 (1) by Eddy(深入充分交换了意见)

网友投稿 267 2022-08-04

深入C#内核 IL汇编语言 (1) by Eddy(深入充分交换了意见)

首先 我们先了解下几个名词

CLR : Common Language Runtime 公共语言运行库

它在.Net应用程序和底层操作系统之间提供了一个操作层。这个操作层可供.Net应用程序使用的运行时环境。

打个比方 我们要写c语言的时候,c语言会编译成汇编语言,汇编语言在去编译成机器语言Cpu指令执行,那么汇编语言就类似于这个CLR,但这个比喻仅仅是比喻,供大家简单理解CLR,区别实际上CLR并不是解释器。

CLS : Common Language Specification 公共语言运行规范

它保证了.Net应用程序的互操作性,被称为公共语言运行规范,CLS限制了命名约定、数据类型、函数类型以及某些其他元素,为不同语言提供了一个公共标准。

打个比方 我们在VB.Net里命名MyField和Myfield、myfield其实是一个变量,不区分大小写并可以写在类的外全局变量。但C#却不可以。这个就是规范干的事,不同语言有不同的规范,C#,VB.Net ,F# ,J# ,等.Net大家族每个成员都有其规范,最后规范解释过后,会编译相同的语种,至于这个语种是什么,呵呵,你知道的。

CLI : Common Language Infrastrucure 公共语言基础结构

它是ECMA国际化和ISO标准的一部分描述,描述了其语言基础结构。

metadata : 元数据

managed code : 托管代码

上面两个皆为CLR的组成部分。

元数据  是应用程序所有结构项 类、类成员、类特性、全局项等的描述符及它们的关系所组成的一套系统。

托管代码  表示了应用程序的方法功能,他们以微软中间语言或公共中间语言的抽象二进制形式进行编码。好了,终于,我们抛出了此文的中心:

MSIL : Microsoft intermediate language 微软中间语言

CIL : common intermediate language 公共中间语言

它们统称 IL 中间语言。

IL代码由CLR 帮忙“托管” 。CLR托管至少包括三个主要的活动:类型控制、结构化异常处理和垃圾收集。

类型控制  涉及在执行期间项类型的验证和转换。

托管异常处理 在功能上与 非托管的结构化异常处理类似,但它是由CLR执行的而不是由操作系统执行的。

垃圾收集 涉及对不再使用的对象进行自动标识和释放。(当然 智能设备 除外,暂时没有垃圾收集功能)

在CLR环境下,.Net应用程序由一个或多个托管可执行体组成,其中每一个都携带着元数据和托管代码,托管代码是可选的,但至少要带有元数据,如果都没有。那你写这个就可以去吃屎了。托管的.Net应用程序称为程序集。托管的可执行体称为Module。每个程序集包含一个主模块,这个模块是什么?呵呵,你知道的。

托管可执行体的两个主要组件:元数据和IL代码。CLR处理这两个组件的主要子系统是加载程序(loader)和JIT(just-in-time 即时)编辑器。

好了,打的手都酸了,在打下去浪费馒头,现在给大家讲讲IL吧,上面的不是废话,提供你IL的背景思想。

将其保存为test.il,并保存编译后执行

例如 保存在D:\test.il 打开cmd 执行ilasm d:\test.il 即可生成test.exe,执行看看结果吧

代码是个大草莓,下一篇我会详细讲讲IL汇编语言,欢迎关注

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【asp.net core】7 实战之 数据访问层定义(aspnet是前端还是后端)
下一篇:x86汇编语言复习笔记(x86汇编与arm汇编)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~