注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

小试IL语言  

2011-09-29 18:34:16|  分类: MSIL |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一段简单的代码:
.assembly Castor{}
.method void test()
{
 .entrypoint
 ret
}
.enetrypoint是IL语言中程序的入口,只能有一个函数包含该指令,并且该指令在函数中的位置是随意的,不需要在最前面或者最后面,即使放到ret(相当于return)后面都是可以的。
如果是编译为可执行文件,则必须要有,动态链接库文件则是可选的。
以点开头的都是指令符(Directive),没有点开头的是实际的IL指令(Instruction)。
注释和传统的C++一样,//单行注释,而/*...*/可以跨行
显示字符串
.assembly Castor{}
.method void test()
{
 .entrypoint
 ldstr "Hello World!"
 call void [mscorlib]System.Console::WriteLine(string)
 ret
}
如你所想,程序编译完成之后会显示那条神圣的“Hello World!”

小试IL语言 - Castor - 趁年轻,多折腾~~

 Call调用需要的提供的参数有返回类型、所处的文件、命名空间、类、函数名
函数名使用::而不是一个点。
ldstr是“load a string on the stack”的简写,将一个字符串压入栈中。
下面将添加一个类:
.assembly Castor{}
.class CCC
{
 .method public static void test()
 {
  .entrypoint
  ldstr "Hello World!"
  call void [mscorlib]System.Console::WriteLine(string)
  ret
 }
}
Reflector中显示如下:

小试IL语言 - Castor - 趁年轻,多折腾~~

 继承一个类
.class CCC extends System.Object
类的构造函数
.method public instance void .ctor() il managed
{
.maxstack 8
ldstr "Constructor"
call void [mscorlib]System.Console::WriteLine(string)
ldarg.0
call instance void [mscorlib]System.Object::.ctor()
ret
}
.ctor就是构造函数。
instance:表示是实例方法,而不是静态方法。
Ldarg.0:加载this指针或者执行堆栈的第0个参数
call instance void [mscorlib]System.Object::.ctor()语句调用了Object的构造函数,似乎不加上面的两句也可以,不过要是某个类具有多个构造类型的函数,就需要显式指明了。
.maxstack:指定了一个方法在执行时计算堆栈(evaluation stack)能够容纳的最大的元素个数。
模块(Module)和系统(SubSystem)
如果在a.il文件开头添加如下指令符:
.module TheModule
.subsystem 3
将会给程序添加一些更多的信息。
.module:模块是所有.NET程序必须存在的逻辑实体,一般一个Assembly只有一个模块,当然也可以有多个。如果该指令不提供的话,就会采用程序集的名称,下面是Reflector中反编译不带模块指令和带指令的区别:

小试IL语言 - Castor - 趁年轻,多折腾~~小试IL语言 - Castor - 趁年轻,多折腾~~

 .subsystem指定了程序能够运行的操作系统。对应值含义如下:
2:Windows字符子系统
3:Windows图形界面子图形
5:OS/2系统
程序的版本信息
将程序集指令中添加.ver后,可控制程序的版本信息
.assembly Castor
{
 .ver 1:23:3456:54
}
其中的四个数含义分别为:主程序版本,次程序版本,Build,Revision Number
添加该指令符后,反汇编的结果如下:

小试IL语言 - Castor - 趁年轻,多折腾~~
  评论这张
 
阅读(1140)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016