《C# to IL》第一章 IL入门

1-

我们用C#、VB.NET语言编写的代码最终都会被编译成程序集或IL。因此用VB.NET编写的代码 可以在C#中修改,随后在COBOL中使用。因此,理解IL是非常有必要的。

一旦熟悉了IL,理解.NET 技术就不会有障碍了,因为所有的.NET语言都会编译为IL。IL是一门中性语言。IL是先发明的,随后才有 了C#、VB.NET等语言。

我们将在一个短而精辟的程序中展示IL。我们还假设读者至少熟悉一 门.NET语言。

a.il

.method void vijay()
{

}

随后,我们用IL编写了一个非常短小的IL程序——它显然是不能工作的,并 将它命名为a.il。那么我们怎么才能把它编译为一个可执行程序呢?不需要为此而焦急,Microsoft提供 了一个ilasm程序,它的唯一任务就是从IL文件中创建可执行文件。

在允许这个命令之前,要确保 你的变量路径被设置为framework中的bin子目录。如果不是,请输入命令如下:

set path=c:\progra~1\microsoft.net\frameworksdk\bin;%PATH%

现在,我们使用如下命令:

c:\il>ilasm /nologo /quiet a.il

这样做会生成下面的错误:

Source file is ANSI

Error: No entry point declared for executable

***** FAILURE *****

将来,我们将不会显示由ilasm生成的输出的第一行 和最后一行。我们还将移除非空白行之间的空白行。

在IL中,允许我们使用句点.作为一行的开始 ,这是一条指令,要求编译器执行某个功能,如创建一个函数或类,等等。任何开始于句点的语句都是一 条实际俄编译器指令。

.method表示创建一个名为vijay的函数(或方法),并且这个函数返回 void,即它不返回任何值。因为缺少较好的命名法则,函数名称vijay显得很随意。

汇编器显然理 解不了这个程序,从而会显示“no entry point”的消息。这个错误信息的生成是因为IL文件 能够包括无数的函数,而汇编器无法区分哪个会被首先被执行。

在IL中,首先被执行的函数被称 为进入点(entrypoint)函数。在C#中,这个函数是Main。函数的语法是,名称之后是一对圆括号()。 函数代码的开始和结束用花括号{}来表示。

a.il

.method void vijay()
{
      .entrypoint
}

c:\il>ilasm /nologo /quiet a.il

Source file is ANSI

Creating PE file

Emitting members:

Global Methods: 1;

Writing PE file

Operation completed successfully

时间: 2024-08-03 02:38:58

《C# to IL》第一章 IL入门的相关文章

Knockout应用开发指南 第一章:入门

原文:Knockout应用开发指南 第一章:入门 1    Knockout简介 (Introduction) Knockout是一个轻量级的UI类库,通过应用MVVM模式使JavaScript前端UI简单化. Knockout有如下4大重要概念: 声明式绑定 (Declarative Bindings):使用简明易读的语法很容易地将模型(model)数据关联到DOM元素上. UI界面自动刷新 (Automatic UI Refresh):当您的模型状态(model state)改变时,您的UI

第一章-Delphi入门(五)(1)

1.4.3.1 调用标准对话框 您可以发现,除了Font,Find,Replace对话框之外,其余标准对话框的Events页都是空白的.因为它们本身是不可视的对话框形式,所以不能响应标准的鼠标键盘操作,只能在程序中调用它们.在本章第一节的Demo程序中,我们已经对用Color对话框有了了解,在程序的适当位置加入对话框所属的Execute方法,可以执行标准对话框. 在编制应用程序时,您可以先设计好主菜单.在需要使用标准对话框的菜单项的事件处理过程中,调用标准对话框的Execute等方法,以满足设计

第一章-Delphi入门(一)(2)

一些早期的具有OOP性能的程序语言如C++,Pascal,Smalltalk等,虽然具有面向对象的特征,但不能轻松地画出可视化对象,与用户交互能力较差,程序员仍然要编写大量的代码.Delphi的推出,填补了这项空白.您不必自己建立对象,只要在提供的程序框架中加入完成功能的代码,其余的都交给Delphi去做.欲生成漂亮的界面和结构良好的程序丝毫不必绞尽脑汁,Delphi将帮助您轻松地完成.它允许在一个具有真正OOP扩展的可视化编程环境中,使用它的Object Pascal语言.这种革命性的组合,使

第一章-Delphi入门(五)(6)

1.5.4 使用工程样板和应用专家 Delphi的工程样板提供预先设计的工程来作为应用程序开发的起点.而应用专家则允许用户按照一定的模式来创建一个应用程序. 1.5.4.1 使用工程样板 当您通过一个工程样板来开始一个工程时,除了空白工程样板外,都会被要求指定一个唯一的子目录即工程目录Project Directory,用来存储新的工程.如果您指定一个不存在的目录,Delphi会帮助您生成它.您可以通过加入新的窗体和程序库单元来修改它,或不加修改地直接利用,而只是加入您的事件处理过程.无论您如何

第一章-Delphi入门(五)(3)

1.5.1.1 创建一个含有About框的例程 作为例子,我们先创建一个含主窗体和简单的About框的应用程序: 在Delphi中创建一个新工程,并为空窗口增加一个Button部件.我们把它作为主窗体,目的是当按动按钮部件时,调出About窗口.下面我们直接进行About窗口的创制. 选用主菜单的File New项,在New页中,选用Form样板,Delphi会自动创建一个空窗体Form2.您可以在其上进行About框的设计,例如加入标签以显示各种信息.加入图片帮助说明等.将Form2的Bord

第一章-Delphi入门(三)(5)

常见的组合框初始化用以下的语句可以实现,它用下拉式列表框的第一项来初始化组合框的缺省值: procedure TForm1.ComboBox1Text(Sender:TObject); begin if ComboBox1.Text = ''then ComboBox1.Text := ComboBox1.Items.String[1] ; end; 以上就是文本输入的基本部件. 1.3.2 按钮和检查框部件 1.3.2.1 Button和BitBtn部件 按钮是Windows常用的部件,前文的

第一章-Delphi入门(三)(3)

1.3 Delphi 2.0的可视化部件用法简介 本节中,我们将较为深入地讲解Delphi的部件.这是编制大型复杂应用程序的必由之路.下面,我们将对各种部件分类进行简单的介绍,以便于您在编程时能够较快地了解有哪些部件可能会满足您的要求,并对其重要的方法.属性等有一个大致的了解. 基本技巧.工具的介绍在本章的第4节中,交互阅读这两部分,多创制几个试验程序,有助于您迅速进入Delphi世界,尽早将这一精妙软件用于实际工作中. 1.3.1 常用的文本相关部件 以下的部件以各种格式显示文本,其中有些是文

第一章-Delphi入门(三)(2)

1.2.5.1 为用户操作建立"事件" 单击窗体上的"Rectangle"按钮,在Object Inspector中,点动"Events"页标签,出现事件窗口.在本例程中,我们只关心OnClick事件,即按钮接收到左键单击时应用程序所作出的反应.在Object Inspector窗口中双击OnClick事件右端的值段,会使得Delphi激活库代码编辑器,并将光标停在该按钮所对应的过程的begin...end之间."Rectangle&q

第一章-Delphi入门(四)(4)

1.4.1.1 进入菜单设计器Menu Designer 创建菜单时,首先要在窗体中放置一个菜单对象.然后调入Menu Designer进行菜单的详细设定.用两种方式可以进入Menu Designer:选中菜单部件,点动属性中Items省略按钮:或在菜单部件上双击左键,就会出现Menu Designer. 1.4.1.2 创建菜单的各个项目 进入Menu Designer,会发现在菜单的第一项位置上有加亮显示.输入顶层菜单项(实际上是在设定顶层菜单项的Caption属性)并回车.一项菜单条设置完