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

推荐订阅源

OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
L
LINUX DO - 热门话题
Blog — PlanetScale
Blog — PlanetScale
博客园 - Franky
J
Java Code Geeks
腾讯CDC
博客园 - 聂微东
The Cloudflare Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
Last Week in AI
Last Week in AI
量子位
Stack Overflow Blog
Stack Overflow Blog
Microsoft Security Blog
Microsoft Security Blog
Google DeepMind News
Google DeepMind News
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
Schneier on Security
C
CERT Recently Published Vulnerability Notes
Latest news
Latest news
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
有赞技术团队
有赞技术团队
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
S
Securelist
AWS News Blog
AWS News Blog
GbyAI
GbyAI
L
LINUX DO - 最新话题
大猫的无限游戏
大猫的无限游戏
Forbes - Security
Forbes - Security
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Attack and Defense Labs
Attack and Defense Labs
C
CXSECURITY Database RSS Feed - CXSecurity.com
Y
Y Combinator Blog
W
WeLiveSecurity
T
Threatpost
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
P
Proofpoint News Feed
D
DataBreaches.Net
博客园 - 三生石上(FineUI控件)
V
V2EX
N
News and Events Feed by Topic
Google DeepMind News
Google DeepMind News
D
Docker
The Hacker News
The Hacker News
A
About on SuperTechFans
Security Latest
Security Latest
NISL@THU
NISL@THU
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Cisco Talos Blog
Cisco Talos Blog
博客园_首页
H
Hacker News: Front Page

博客园 - 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的运行机制。