.Net与msil

很多人可能都不知道.Net的底层还有这么一种语言,包括我。直到前几天,看到一本书上详细介绍了这个东西后,才开始对MSIL这个东西开始感兴趣了。

事实上,使用c#、vc或者vb.net的程序员,可能永远都不会接触到MSIL,因为它太底层了。MSIL的作用,就相当于以前的汇编语言, 它只是把C#等高级语言编译成的中间代码,解释为原生的机器代码来运行。不过,花一点时间来了解一下这个东西,还是蛮有意思的一件事。

MSIL有一些指令,这些指令就相当与以前的汇编语言指令,只不过这是虚拟机上的指令而已。常见的MSIL指令有这些: add,相加结果入栈; box和unbox,装箱和拆箱;call,调用某方法;newobj,创建一个对象;等等等等。。。。

了解这些有什么用,别急,慢慢看,接下来我们来看几个有意思的东西。

如果你的机器上装有MSN,那么请到命令行下敲入这个命令(这几个exe或者位于.net安装目录下的sdk目录,要么位于window目录下的.net里的framework目录里的bin目录,所以使用前需要先设置好path):

tlbimp msmgs.exe /out:Messenger.dll

tlbimp.exe这个是一个.net提供的将com组件转化为.net的装配件的东西,有意思吧,经过这一步,你的msn就有了一个可以被.net语言调用的装配件dll文件了。

那这又怎样,.net不是直接可以调用com吗,干吗这么麻烦。嘿嘿,别急,接下来,就来对这个装配件动动手脚了,命令行:

ildasm /text Messenger.dll /out:Messenger.il

ok,使用任何一个文本编辑器打开这个.il文件,你看到了什么?呵呵,所有类的申明都在这里了,你可以看到类似这样的语句:

.class private auto ansi sealed xxxxx

这是一个私有的类,如果你在正常的.net开发环境引入com组件,是看不到这个类的,把它改为public,顺便再把所有的类似这样的东西改为public,保存,呵呵,真好,现在我有自己的msn装配件了。但是还不行,还差一步,这还只是IL文件,不是dll。那么继续命令行:

ilasm /dll Messenger.il

ok,大功告成,好好比较一下这个新的dll和微软提供的dll有什么区别吧,这样的方法适用于很多com方式生成的程序,QQ也是。^_^

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值