技术开发 频道

工欲善其事——.NET底层研究工具

  【IT168 技术】在开发软件的时候都知道使用Visual Studio提高开发效率,而不是用命令行+NotePad(如果你是在学习那就另当别论了)。那么对于研究.Net一些底层东西,有哪些器呢?

  我认为有三样

  1、 ILDasm与MSIL

  ILDasm,顾名思义,就是IL(MSIL,微软中间语言)的反编译器。各位看官应该都了解下面这张图

图1  ILDasm

  通过为不同的语言实现编译器,而这些编译器的目标代码都是MSIL(当然,编译器并不只生成MSIL,至于其余的东西,后面再做介绍)。

  那么MSIL又是怎么样的一门语言呢?我在这里无意介绍MSIL的详细语法(关于是否应该学习IL的争论在博客园里已经讨论了两次了,在这里我不想再次引起纷争)。我也不推荐大家花费很多时间去学习MSIL的细节内容,除非你要实现一门在.NET平台运行的语言,如果你只想像我一样,了解一些语法糖或编译器在背后干的事儿,那你只需要阅读下面的几百字就可以了。

  Start with ILDasm

  开始菜单,程序->Visual Studio(不管哪个版本)->Visual Studio Tools->肯定有一个命令符的快捷方式,打开这个后在提示符后输入:ILDasm,就会启动ILDasm程序了。

图2 启动ILDasm

  上图是用ILDasm打开一个托管程序集后的图示,ILDasm会用不同的图标表示程序中不同的元素。用ILDasm我们不仅仅可以看到编译器生成的MSIL代码,还可以看到生成的元数据。双击一个节点可以弹出一个显示代码的窗口:

图3 ILDasm代码窗口

  哦,你说不懂IL,但是你只要不深究上面这几行代码“所有”的意思,你应该能大致明白它是干啥的:定义一个类,该类继承自System.Object。不难吧。你会发现在这些代码中还穿插着很多前面带点的东西,比如这里的.class,这就是元数据(什么是元数据?哦,简单点说就是编译器除了IL代码外,还附赠一些更多信息,让CLR运行这些程序集时能对它了解的更多)。还有这里的public,auto,ansi,beforefieldinit,这些都是元数据,这些举足轻重的元数据,作用大的可以影响到CLR运行代码的方式。对于元数据的作用超出了本节的范围,在以后的章节中会涉及。

0
相关文章