.net出现这么久了,很多人已经能够熟练的运用C#进行软件开发,也有一些像我这样的人喜欢去研究一下.net的内部运行机制。我这里来谈谈IL(Intermediate Language),虽然我们不太可能直接用IL来开发软件,但是IL的确是了解.net内部机制的一道大门。
Visual Studio.NET给我们提供了两个与IL有关的工具ilasm和ildasm,他们是IL编译器和IL反编译器,有关它们的使用方法大家可以参看MSND文档,我这里就不再说了。不过在开始谈论IL,我还要谈下CLR基础。
CLR(Common Language Runtime),MSDN文档也有一些对它的描述,我这里的描述只是对MSDN文档的一些补充,以使读者更好的理解CLR。CLR是.net框架的核心,可以把它想象成是一个可以运行IL code的CPU。就普通的Intel CPU而言,它是依靠Register和Stack来运行程序,而CLR则是一个只依靠Stack来运行程序的CPU。举一个例子,如果我们要进行1+2的运算,则IL指令会现将1和2移到Stack的顶部再进行add运算,add把1和2从Stack顶部移走,再将运算结果3放到Stack顶部。CLR的Stack不是以Byte的形式存在,也不是以Word的形式存在,而是Slot。Slot是一种能够容纳任何类型实体的结构,就是说我们能够把int放到Stack中,也可以把float放到Stack中,Stack中的内容可能是int->float->object A->object B->int,一切皆有可能。实体被移到Stack顶部的过程叫做loading(简写成ld),把实体从Stack顶部移走的过程叫做storing(简写成st)。
好,现在让我们开始和IL亲密接触吧!看看我们的第一个IL程序——“Hello World”。
.assembly PrintString {}
//Console.WriteLine("Hello, World)"
.method static public void main() il managed
{
.entrypoint // IL不用把Main()函数定义为程序的入口,而是用.entrypoint定义入口
.maxstack 8 //定义Stack的最大深度为8
// *****************************************************
// Console.WriteLine("Hello, World)";
// *****************************************************
ldstr "Hello, World" //将“Hello World”这个String移到Stack顶部
// Call static System.Console.Writeline function
// WriteLine()把String从Stack顶部移走,不返回任何值
call void [mscorlib]System.Console::WriteLine (class System.String)
// *****************************************************
ret
}
保存程序为Hello.il,然后就是编译它。打开“Visual Studio .NET命令提示”,切换到Hello.il所在的目录,输入“ilasm Hello.il”,Enter。ilasm会提示你编译成功,输入“Hello”,Enter。就可以看到我们的程序的运行结果了。
分享到:
相关推荐
how to get a readable and programmable result from the IL array provided by the MethodBody.GetILAsByteArray() method.
C# to IL paf版..........
【传感器】IL系列 CMOS激光位移传感器zip,【传感器】IL系列 CMOS激光位移传感器
C# IL语言入门书籍 重新上传, 这是一本好书, 有兴趣的可以参考.
IL 格式不正确Bad IL Format 解决方案二
Toil是一个可扩展的,高效跨平台管道管理系统,完全用Python编写,并围绕函数式编程的原理设计
Introduction ... Someone had to, and because I had been given the responsibility of designing and developing IL Assembler and ILDASM, it was my obligation to see it through all the way.
资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:toil-3.1.2a1.dev12-py2.7.egg 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
资源来自pypi官网。 资源全名:toil-rnaseq-3.3.0a1.dev116.tar.gz
IL Spy .Net反汇编工具
Zygisk版Il2CppDumper,在游戏运行时dump il2cpp数据,可以绕过保护,加密以及混淆。如何食用1.安装Magisk v24以上版本并开启Zygisk2.生成模块 1) GitHub Actions a.Fork这个项目 b.在你fork的项目中选择Actions选项...
威纶AR60T_AR80iL-O系列通用变频器使用手册
Toil是一个可扩展的,高效跨平台管道管理系统,完全用Python编写,并围绕函数式编程的原理设计 Toil 是一个可扩展、高效、跨平台(Linux 和 macOS)的管道管理系统,完全用 Python 编写,并围绕函数式编程的原则...
il2cpp一键dump-Mac
IL-7/IL-7R在肿瘤中的研究进展,刘子慧,邱雪杉,细胞因子(cytokine,CK)是一类能在细胞间传递信息、具有免疫调节和效应功能的蛋白质或小分子多肽。白介素7(interleukin 7,IL-7)是一种�
IL2cppDumper version 6.2.3
通过C#深入介绍IL语言, 深入了解.Net必看书籍
基恩士CMOS 激光位移传感器IL系列说明书
frida-il2cpp 那些想玩Unity il2cpp游戏的人的帮助库。 在Windows上进行了测试,但也可以轻松在Android / iOS上使用。 我认为只有Process.findModuleByName("GameAssembly.dll")!; il2cpp.ts需要更改。 示例类 ...
IL语言培训资料,帮助理解IL语法,理解IL与C#源代码的对应关系。附实例和IL指令集大全。