01 . Python简介
311
2022-08-14
深入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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~