syuko

Just For Fun。生存,社会秩序,娱乐
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

用MSIL来写一个“Hello World”

Posted on 2008-04-28 07:57  syuko  阅读(853)  评论(11编辑  收藏  举报


用MSIL来写一个“Hello World”的程序

    我们一直称C#为"优雅"的程序设计语言,就在于它简单易上手的特点。但随着CLR及各种类库的不断发展,其封装地离"底层"也越来越远了,使我们不能知道其运

行的本质。下面我试着以CLR的语言MSIL来写一个"Hello World"的程序,以管窥其内部的机理。既然是研究其"底层"自然就不用VS了,直接用记事本编辑。

    在记事本中编写如下程序:

.assembly extern mscorlib {auto}

.assembly MyApp{}

.module MyApp.exe

.namespace MyApp

{

.class public Program extends [mscorlib]System.Object

{

    .method static private void Main(string [] args)

    {

     .entrypoint

 

     ldstr "Hello World!"

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

     ret

    }

}

}

    然后保存为helloworld.il。注意其扩展名为IL文件的特有扩展名"il"。(用framework自带的工具ildasm.exe可以反编译动态链接库获取其IL代码,然后可以将IL代

码另存为IL文件)。

    接着运行cmd.exe,找到Framework下ilasm.exe文件。例如我的机器上(framework安装在默认目录下)

为"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727"。在cmd里将当前文件夹切换到ilasm.exe所在文件夹下。然后使用ilasm.exe编译helloworld.il。如

下图:

然后就会在helloworld.il的目录下生成一个helloworld.exe文件(当然前提条件是没有出错:))。

    这样我们就用MSIL写出了一个"Hello World"程序。尽管知道了MSIL并不能说就是理解.net CLR的运行机制,但它会有助于理解CLR的运行机制。