IL系列文章之一:Say Hello to IL

原创 2003年02月24日 09:09:00

IL系列文章之一:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Say Hello to IL

.net出现这么就了,很多人已经能够熟练的运用C#进行软件开发,也有一些像我这样的人喜欢去研究一下.net的内部运行机制。我这里来谈谈ILIntermediate Language),虽然我们不太可能直接用IL来开发软件,但是IL的确是了解.net内部机制的一道大门。

Visual Studio.NET给我们提供了两个与IL有关的工具ilasmildasm,他们是IL编译器和IL反编译器,有关它们的使用方法大家可以参看MSND文档,我这里就不再说了。不过在开始谈论IL,我还要谈下CLR基础。

CLRCommon Language Runtime),MSDN文档也有一些对它的描述,我这里的描述只是对MSDN文档的一些补充,以使读者更好的理解CLRCLR.net框架的核心,可以把它想象成是一个可以运行IL codeCPU。就普通的Intel CPU而言,它是依靠RegisterStack来运行程序,而CLR则是一个只依靠Stack来运行程序的CPU。举一个例子,如果我们要进行12的运算,则IL指令会现将12移到Stack的顶部再进行add运算,add12Stack顶部移走,再将运算结果3放到Stack顶部。CLRStack不是以Byte的形式存在,也不是以Word的形式存在,而是SlotSlot是一种能够容纳任何类型实体的结构,就是说我们能够把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()把StringStack顶部移走,不返回任何值

    call   void [mscorlib]System.Console::WriteLine (class System.String)

 

    // *****************************************************

    ret

}

 

保存程序为Hello.il,然后就是编译它。打开“Visual Studio .NET命令提示”,切换到Hello.il所在的目录,输入“ilasm Hello.il”Enterilasm会提示你编译成功,输入“Hello”,Enter。就可以看到我们的程序的运行结果了。

IL(中间语言)

http://blog.csdn.net/dodream/article/details/4726421 一、IL与汇编语言 IL是微软.NET平台上衍生出的一门中间语言,.NET平台上的各种高级语言...
  • u014605728
  • u014605728
  • 2016年03月09日 10:42
  • 1064

读懂IL代码就这么简单 (一)

转自 http://www.lupaworld.com/article-229958-1.html 对于IL代码没了解之前总感觉很神奇,初一看完全不知所云,只听高手们说,了解IL代码你能更加清楚的知道...
  • cp790621656
  • cp790621656
  • 2015年06月20日 14:01
  • 1559

编辑IL文件 修改DLL文件

本文章只是技术探讨,学习,技术上的研究而已。请支持正版. 如:KS.Gantt.DLL 为例 使用ILSpy反编译 工具利用ildasm反编译 KS.Gantt.dll  生成IL中间...
  • rztyfx
  • rztyfx
  • 2016年11月23日 16:22
  • 438

一步步教你读懂NET中IL(图文详解)

原文:http://www.jb51.net/article/39635.htm 本文章以一个实际的例子,让你了解堆叠式 VM 的运作原理,并对 .NET IL(Intermediate Langua...
  • Joyhen
  • Joyhen
  • 2015年08月05日 11:02
  • 1423

中间语言(IL)

http://blog.csdn.net/dodream/article/details/4726421 一、IL与汇编语言 IL是微软.NET平台上衍生出的一门中间语言,.NET平台...
  • CNHK1225
  • CNHK1225
  • 2014年09月17日 14:01
  • 1777

C#中CLR(公共语言运行时)与IL(中间代码)

.net平台中的CLR首先要说明的是,.NET平台与C#不是一回事 它是C#,VB.net等程序运行的平台。CLR是公共语言运行时,是 .NET Framework的重要组成部分。它提供了内存管理...
  • Pwiling
  • Pwiling
  • 2016年05月20日 15:00
  • 6962

中间语言(IL)

http://blog.csdn.net/dodream/article/details/4726421
  • hcwzq
  • hcwzq
  • 2014年10月05日 20:47
  • 1571

IL汇编语言教程

原文地址 http://www.cnblogs.com/xiaoxiangfeizi/archive/2011/08/08/2130768.html 原文作者 潇湘妃子IL汇编语言介绍(译)最近在学习...
  • qq446569365
  • qq446569365
  • 2017年03月03日 13:26
  • 409

.NET程序集及其执行(IL、元数据、托管模块、JIT)

从源代码文件到托管模块再到程序集 不管选择了哪种.NET语言编程,需要明白的是,尽管.NET二进制文件与非托管Windows二进制文件(*.dll或*.exe)具有相同的文件扩展名,但它们的内部却是完...
  • Krypton_Lee
  • Krypton_Lee
  • 2016年06月12日 16:09
  • 881

C# 构造函数避免IL(反编译)代码膨胀的方法--C#编译有点狂啊

C# 构造函数避免IL代码膨胀的方法--C#编译有点狂啊
  • u010533180
  • u010533180
  • 2017年03月31日 12:42
  • 1028
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IL系列文章之一:Say Hello to IL
举报原因:
原因补充:

(最多只允许输入30个字)