惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
大猫的无限游戏
大猫的无限游戏
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 叶小钗
月光博客
月光博客
Last Week in AI
Last Week in AI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
阮一峰的网络日志
阮一峰的网络日志
罗磊的独立博客
IT之家
IT之家
美团技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
S
SegmentFault 最新的问题
宝玉的分享
宝玉的分享
博客园 - Franky
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Jina AI
Jina AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Cloudflare Blog
博客园 - 司徒正美
爱范儿
爱范儿

博客园 - syuko

【转】IE8 松散耦合进程框架探索 【转】Windows 文件夹的秘密:Windows 目录到底占用了多少真实的硬盘空间 【转】d:DesignInstance, d:DesignData in Visual Studio 2010 Beta2 RadTreeView:How to Get Item by Path RadTreeViewItem - event MouseLeftButtonDown or Up never fires visual studio 2005 中的部署 产生“不可恢复的生成错误” Windows 7使用记事及琐事流水帐-职称英语考试始末记事 Oracle难道不能处理大数据并发的问题 [转载]DNS解析错误解决办法 鼠标(Mouse)的复数问题告诉我们治学要严谨 Just for Fun-生存,社会秩序,娱乐 软件创作 VB6.0通过SoapToolkit访问WebService问题 [转] oracle rownum 探析 天地生人,有一人莫不有一人之业;人生在世,有一日当尽一日之勤 小窥黄鹤楼 JavaScript基础之继承(二) JavaScript基础之继承(附实例) JavaScript基础之对象
用MSIL来写一个“Hello World”
syuko · 2008-04-28 · via 博客园 - syuko

用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的运行机制。