导航

SILDASM-小工具随笔

Posted on 2005-07-18 12:58  mini-star  阅读(1488)  评论(21)    收藏  举报

记得神雕侠侣中,描述杨过找到了一位武林老前辈的剑冢。这位老前辈青年时用的是一把削金断玉的宝剑,中年用的是一把无坚不摧的重剑,而晚年他用的却是一根普通的木枝。

对于我们程序开发人员来说,选择一门语言就像选择宝剑一样,无论选择哪门语言都会引起激烈的讨论。前不久,就有用户在微软的Web Cast上问C#开发组长关于C#和C++、Java和Delphi之间速度的比较。而他的回答很巧妙,说C#相当的快,这个问题本身没有意义,因为人们对语言的速度比较,绝大多数全是比较各个语言所带的运行库的速度,跟语言本身没有太大关系。同样,也有人问Bjarne Stroustrup用C替代C++语言的可能性。Bjarne答到,“如果你C的水平足够高,你甚至可以自己实现所有C++的功能,包括RTTI和类等一切功能。但现在已经有一个很稳定和有效的实现(C++),你为什么不用呢。(注:第一个C++编译器就是用Bjarne等用C语言实现的)

现在进入.NET编程时代后,C#作为微软的旗舰语言迅速的普及,很多人不关心甚至不知道存在ILASM这门语言,尽管它支持Namespace,类和嵌套类等概念,比我们想象中的汇编语言高级得多。但无论怎样,ILDASM这个以蓝色闪电作为图标的程序,却是所有.NET开发者都会用到的工具。无论我们选用那种.NET语言(Managed C++除外),都是ILASM的一个子集。 当我们学习C#或其它.NET高级语言研究到一定程度后,会觉得它们其实是一个黑盒子,不可避免的想要窥探到其内部实现,而ILDASM给我们揭开它秘密的可能性。

最近,我用了几天时间写了一个类似ILDASM的工具:SILDASM。既然ILDASM已经足够强大了,为什么还要SILDASM呢?即便是同样的数据,为了满足不同的需要,可以有Tabular,Crosstab, N-Up等不同的报表形式。SILDASM采用Split Window显示高级语言(C#)和对应的MSIL语言。当用户点击源码时,相对的MSIL会用红色加亮,显示给用户。如果你采用ILASM做最终程序的性能调优,或正在用ILDASM学习研究ILASM语言,希望SILDASM对你有用。

有人问了,如果SILDASM必须依赖ILDASM,那它还有什么技术含量呢?我也花了很多时间研究SSCLI中的C# Compiler和MSIL Compiler。问题不仅仅是微软能否授权发布基于SSCLI的程序,也包括一旦决定自己维护ILDASM和C# Compiler功能,就必须同步对它进行升级。我的耳边不停响起"Don't try to invent the wheel again"的声音,既然ILDASM和CSC都是免费由微软提供,SILDASM为什么不能基于它们呢,这也是最简单和有效的方式了。

SILDASM的功能:

用户必须提供Debug版的Managed Exe or Dll,SILDASM将调用ILDASM,反编译成MSIL代码,放到右边的窗口。用户选择对应的源文件,SILDASM将放它的内容在左边的窗口。这时用户点击左边的代码,右边的窗口自动滚动到相应MSIL代码,并用红色标明。

用户也可以提供C# Project file,SILDASM将首先调用csc.exe进行编译成Debug程序, 接着调用ILDASM进行相应的操作。

小结:

尽管SILDASM并没有进行足够的优化,但它的性能完全满足我的需要了。而且因为时间的关系,我没有加入其它辅助功能(如:加入一些SnipperCompiler的功能)。如果你有什么建议,尽管告诉我,我非常高兴得到你的反馈。

Download

Mini-Star