用MSIL来写一个“Hello World”
2008-04-28 07:57
211 查看
用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的运行机制。
我们一直称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的运行机制。
相关文章推荐
- 在vs2017中用.net核创建一个c#Hello World的申请
- 一个完整的struts 2 Hello World程序(5)
- Qemu下的一个Hello World程序
- 实验报告一:写一个hello world小程序
- Hello World,一个简单的JSR 168 portlet
- 学习如何新建一个c#项目和输出hello world
- windows wdm驱动的一个hello world例子
- 一个Hibernate的Hello World, 基于Hibernate 4.0
- 开发一个Windows版的hello world
- C# 显示一个“Hello world!”
- Spring+Spring Security+Maven 实现的一个Hello World例子
- web service 对外发布一个hello world接口(入门)
- Linux Socket编程实例(一个Hello World程序)
- Physx的一个hello world
- [OS] 用汇编语言编写一个Boot Sector显示"Hello world!" [李园7舍_404]
- linux设备驱动第二篇:一个简单hello world驱动如何实现
- 3.写一个hello world页面
- 定义一个字符串“Hello World ! Coffee”,将此字符串拆分成Hello,World,Coffee三个单词
- 使用python写一个Hello World