syuko——驿路梨花

武汉人勇闯天下
爽气西来,云雾扫开天地撼;大江东去,波涛洗净古今愁。
posts - 18, comments - 148, trackbacks - 11, articles - 1
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

用MSIL来写一个“Hello World”

Posted on 2008-04-28 07:57 syuko——驿路梨花 阅读(225) 评论(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的运行机制。

Tag标签: MSIL

Feedback

#1楼    回复  引用  查看    

2008-04-28 08:28 by 韩现龙      
很好,很强大。

#2楼    回复  引用    

2008-04-28 08:39 by 信110 [未注册用户]
http://www.vijaymukhi.com/documents/books/ilbook/
送给你-_-

#3楼    回复  引用  查看    

2008-04-28 08:47 by 留恋星空      
貌似有点懂了

#4楼 [楼主]   回复  引用  查看    

2008-04-28 10:24 by syuko——驿路梨花      
@韩现龙
很黄,很暴力。

#5楼 [楼主]   回复  引用  查看    

2008-04-28 10:26 by syuko——驿路梨花      
@信110
很好的资料,不过有些章节打不开,是空白页。
不知能不能翻译或是将它做成电子书,会不会有版权的争议。

#6楼 [楼主]   回复  引用  查看    

2008-04-28 10:26 by syuko——驿路梨花      
@留恋星空
:)

#7楼    回复  引用  查看    

2008-04-28 12:35 by 李战      
谢谢。
驿路梨花,名字很好,喜欢。

#8楼 [楼主]   回复  引用  查看    

2008-04-28 14:09 by syuko——驿路梨花      
@李战
:)。随便取的一个,意为编程旅途中的一点浪花。驿路梨花可不是指我,而是指博客园我的这块地方,哈哈,有人就说我一个大男人取了这么个女性化的名字有些恶心。

#9楼    回复  引用  查看    

2008-04-29 10:04 by 韩现龙      
--引用--------------------------------------------------
syuko——驿路梨花: @李战
:)。随便取的一个,意为编程旅途中的一点浪花。驿路梨花可不是指我,而是指博客园我的这块地方,哈哈,有人就说我一个大男人取了这么个女性化的名字有些恶心。
--------------------------------------------------------
是我说的。
哈哈哈哈哈哈

#10楼    回复  引用  查看    

2008-04-30 08:59 by 天生俪姿      
提几点建议:
1.我想如果要想这个的话,有必要介绍一下有关你主题的相关知识,我想就这个来说的话,有必要说一说Il是什么东西?还有ilasm.exe 这个命令的相关的一些常用参数。
2.格式的问题
----------------------------------------------------------------
引用原文
然后保存为helloworld.il。注意其扩展名为IL文件的特有扩展名"il"。(用framework自带的工具ildasm.exe可以反编译动态链接库获取其IL代码,然后可以将IL代

码另存为IL文件)。
----------------------------------------------------------------

这里的 IL代 我想应该是和下一行在一行写的吧。

另外 截的图 我想最好还是去掉那个 千千静听 的东东。这样显得正式点
还有是不是再解释你写的这段代码是什么意思呢?

例如 ldstr 这个是做了什么事情?

建议仅代表个人观点,仅供参考。

#11楼 [楼主]   回复  引用  查看    

2008-04-30 10:06 by syuko——驿路梨花      
@天生俪姿
你提的建议比较好。
对第1点,“1.我想如果要想这个的话,有必要介绍一下有关你主题的相关知识,我想就这个来说的话,有必要说一说Il是什么东西?还有ilasm.exe 这个命令的相关的一些常用参数。”

这个hello world程序,只是一道开胃菜。在开胃菜里没必要介绍的太多,只是耍一手,让大家看个热闹就行。具体的介绍得在后续的文章里进行。如果急的话可以先看看楼上“信110 [未注册用户] ”给出的链接。也同样因为“信110 [未注册用户] ”的链接,所以我又不能只是挨个命令的介绍,那个链接里面相当详细了,什么都有了,我只能多想想怎么以另一个角度去写。这样就出的慢了,加之最近又忙起来了,就更慢了。

对第2点格式的问题。

我发现要是单倍行距的话看起来密密麻麻的,看起来太累了,我每隔一行就空一行,这样看起来开阔一些就不累了。要是大家觉得这样不好,我就再改为单倍行距。

截图的问题我倒没有发现,看了你的评论才发现的。这确实是个人的疏忽。


“还有是不是再解释你写的这段代码是什么意思呢?”,这个和低一点一样,在后续的文章里会有说明的。



标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
博客园首页

新闻频道

社区

小组

博问

网摘

闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-04-28 08:22 编辑过
成果网帮您增加网站收入


相关链接: