《C# to IL》第二章 IL基础

-2-

如果你真的想要理解C#代码,那么最好的方法就是通过理解由C#编译器生成的代码。本章 和下面两章将关注于此。

我们将用一个短小的C#程序来揭开IL的神秘面纱,并解释由编译器生成 的IL代码。这样,我们就可以“一箭双雕”:首先,我们将揭示IL的奥妙,其次,我们将会更 加直观地理解C#编程语言。

我们将首先展示一个.cs文件,并随后通过C#编译器以IL编写一个程序 。它的输出和cs文件是相同的。输出将会显示IL代码。这会增强我们对C#和IL的理解。好吧,不再啰嗦, 这就开始我们的冒险之旅。

a.cs

class zzz
{
    public static void Main()
    {
        System.Console.WriteLine("hi");
        zzz.abc();
    }

    public static void abc()
    {
        System.Console.WriteLine("bye");
    }
}

c:\il>csc a.cs

c:\il>ildasm /output=a.il a.exe

a.il

//  Microsoft (R) .NET Framework IL Disassembler.  Version 1.0.2204.21
//  Copyright (C) Microsoft Corp. 1998-2000
 
// VTableFixup Directory:
// No data.
.subsystem 0x00000003
.corflags 0x00000001
.assembly extern mscorlib
{
  .originator = (03 68 91 16 D3 A4 AE 33 )                   // .h..3
  .hash = (52 44 F8 C9 55 1F 54 3F 97 D7 AB AD E2 DF 1D E0
           F2 9D 4F BC )                            // RD..U.T?.O.
  .ver 1:0:2204:21
}
.assembly a as "a"
{
  // --- The following custom attribute is added automatically, do not uncomment -------
  //  .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::
// .ctor(bool, bool) = ( 01 00 00 01 00 00 )
  .hash algorithm 0x00008004
  .ver 0:0:0:0
}
.module a.exe
// MVID: {3C938660-2A02-11D5-9089-9752D1D64E03}
.class private auto ansi zzz
       extends [mscorlib]System.Object
{
  .method public hidebysig static void Main() il managed
  {
    .entrypoint
    // Code size       16 (0x10)
    .maxstack  8
    IL_0000:  ldstr      "hi"
    IL_0005:  call       void [mscorlib]System.Console::WriteLine(class System.String)
    IL_000a:  call       void zzz::abc()
    IL_000f:  ret
  } // end of method zzz::Main
 
  .method public hidebysig static void abc() il managed
  {
    // Code size       11 (0xb)
    .maxstack  8
    IL_0000:  ldstr      "bye"
    IL_0005:  call       void [mscorlib]System.Console::WriteLine(class System.String)
    IL_000a:  ret
  } // end of method zzz::abc
 
  .method public hidebysig specialname rtspecialname
          instance void .ctor() il managed
  {
    // Code size       7 (0x7)
    .maxstack  8
    IL_0000:  ldarg.0
    IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
    IL_0006:  ret
  } // end of method zzz::.ctor
 
} // end of class zzz
 
//*********** DISASSEMBLY COMPLETE ***********************

上面的代码是由IL反汇编器生成的。

时间: 2025-01-26 22:50:41

《C# to IL》第二章 IL基础的相关文章

JAVA AJAX教程第二章-JAVASCRIPT基础知识

开篇:JAVASCRIPT是AJAX技术中不可或缺的一部分,所以想学好AJAX以及现在流行的AJAX框架,学好JAVASCRIPT是最重要的.这章我给大家整理了一些JAVASCRIPT的基础知识.常用代码和事件汇总. 一.基础知识: 1.document.write(""); 输出语句 2.JS中的注释为// 3.传统的HTML文档顺序是:document->html->(head,body) 4.一个浏览器窗口中的DOM顺序是:window->(navigator,

第二章 Servlet基础

这章我们主要的目标 理解Servlet Servlet的编码和部署 Servlet生命周期 Servlet的配置 Servlet与容器交互    什么是Servlet -是运行在Web服务器或应用服务器上的Java程序 -在Web上创建动态内容的有效而强大的解决方案 -由容器来管理生命周期与Web服务器交互 -由Sun规范了其功能    Servlet的规范组成   Web应用程序  Servlet和HTTPServlet   过滤器  安全  国际化       Servlet生命周期 Ser

初学JavaScript第二章_基础知识

JavaScript的对象都是实例化了的,只可以使用而不能够创建继承于这些对象的新的子类. window对象为所有对象的Parent window对象的主要属性有:Name,Length,Parent,Self,Top,Status,Default Status,Opener,Closed. window对象的主要方法有:Item,alert,blur,close,confirm,open,focus,showModalDialog. Document对象的常用属性:alinkcolor,Anc

第二章 算法基础

2.1 插入排序 C++实现: #include<iostream> using namespace std; void InsertSort(int arr[],int n) { int i,j,key; for(i=1;i<n;++i) { key=arr[i]; j=i-1; while(j>=0&&key<arr[j]) { arr[j+1]=arr[j]; j--; } arr[j+1]=key; } } int main() { int arr[1

&amp;gt; 第二章 NGWS Runtime 技术基础(rainbow 翻译) (转自重粒子空

<<展现C#>> 第二章 NGWS Runtime 技术基础(rainbow 翻译)   出处:http://www.informit.com/matter/ser0000001/chapter1/ch02.shtml 正文: 第二章  NGWS  runtime 技术基础     既然你已经具有了C#全面的印象,我也想让你了解NGWS runtime的全貌.C#依靠由NGWS提供的运行时:因此,有必要知道运行时如何工作,以及它背后所蕴含的概念.    所以,这一章分为两部分--它

《Abaqus GUI程序开发指南(Python语言)》——第二章 Python语言基础2.1 Python语言的特点

第二章 Python语言基础 Abaqus GUI程序开发指南(Python语言)Python语言是一种动态解释型编程语言,其功能强大,简单易学,支持面向对象编程(object-oriented programming),虽然由于其动态性致使程序解释执行速度比编译语言慢,但是随着Python语言的不断优化以及计算机硬件的迅猛发展,Python语言将会受到越来越多用户的关注.Python具有开源.自由等特征.它的简洁性和易用性使程序的开发过程变得简单,特别适用于快速应用程序开发. 本章将简要介绍P

论坛营销的基础知识(第二章)

中介交易 SEO诊断 淘宝客 云主机 技术大厅 上一篇我们介绍的<论坛营销的基础知识(第一章)>简单的回顾下; 论坛营销的基本特点: 1.针对性强 2.氛围好 3.口碑宣传 4投入少,见效快 5.掌握用户信息 论坛营销的要素:天时,地利,人和 今天笔者周旭昇为大家继续介绍论坛营销的基础知识(第二章)操作步骤 第一.了解用户的需求 单从了解需求这一部分讲,我们需要了解的事情有很多; 1.目的:有很多人在做营销的时候不知道自己想要什么,为了什么,没有一个明确的目标,盲目的就去投入,听说人家怎么做,

《.net编程先锋C#》第二章 理论基础-公用语言 运行环境(转)

编程 第二章 理论基础-公用语言 运行环境既然你已经具有了C#全面的印象,我也想让你了解NGWS runtime的全貌.C#依靠由NGWS提供的运行时:因此,有必要知道运行时如何工作,以及它背后所蕴含的概念.所以,这一章分为两部分--它们是所有的概念和使用的基础.两部分的内容虽然有些重叠,但它有助于加深理解正在学习的概念. 2.1 NGWS RuntimeNGWS和NGWS Runtime为你提供了一种运行时环境.该运行时管理执行代码,并提供了使编程更容易的服务.只要你的编译器支持这种运行时,你

第二章、进程的描述与控制

第二章.进程的描述与控制 2.1 前趋图和程序执行 2.1.1 前趋图 概念: 所谓前趋图:指一个有向无循环图(DAG),它用于描述进程之间执行的先后顺序. 2.1.2 程序顺序执行 特征: 顺序性 封闭性:指程序在封闭的环境中运行,程序运行时独占全机资源,资源的状态只有本程序才能改变,程序一旦开始执行,其执行结果不受外界因素影响 可再现性:只要条件相同还会得到相同的执行结果. 2.1.3 程序并发执行 特征: 间断性 失去封闭性 不可在现性 2.2进程的描述 2.2.1 进程的定义和特征 定义