天天看点

Reflector 已经out了,试试ILSpy

reflector是.net开发中必备的反编译工具。即使没有用在反编译领域,也常常用它来检查程序集的命名规范,命名空间是否合理,组织类型的方法是否需要改善。举例说明,它有一个可以查看程序集完整名称的功能,请看下图

Reflector 已经out了,试试ILSpy

这里的name,是标识一个程序集的完整标识,当gac中存在程序集的多个版本时,这个名称是唯一的识别名称。

但是,reflector很早就转向收费软件了,需要购买许可才可以使用。对于耻于用盗版的朋友,通常会放弃。有朋友说,reflector并没有增加更霸道的功能,却转向收费,令人费解。再看看市场上的.net反编译软件,被reflector击溃。

一提到reflector,说到.net反编译,reflector常常是默认的首选工具。

这里提起一下visual studio的垄断。visual studio占据了.net开发工具系列的绝对垄断地位。在.net 1.x时代,还有c# builder,delphi.net来使用和体验,一争高低。可是到后来,.net framwork更新频繁,动辙在编译器级别,和语言层面做更新,这令第三方的软件开发工具商非常苦恼,这些工具也从市场上慢慢消声匿迹,几乎没有第三方的软件开发商愿意开发.net开发工具与visual studio一争高低。没有了竞争,进步的速度要慢很多。visual studio 2008差不多就是visual

studio 2005+sp的替代品,在工具层面,visual studio 2005 sp1加上了web application,就是visual studio 2008。虽然说语言层面是进步了很多,.net 3.0,.net 3.5,linq, 框架方法增加:wcf,wpf,wf,但是,我一直认识从2005到2008,它在工具层面没有什么进步。 

sharpdevelop 是除visual studio外,另一个可选择的唯一的.net开放工具,并且它是开源的。它提供的功能也相当不错,几乎就是在重写visual studio。最新的版本中,直接增加了对visual studio的解决方安案文件和项目文件的支持。ilspy是sharpdevelop小组的反编译工具,也是开放源代码的,今天来介绍一下它的调试器和反编译器,以让那个收费的,却没有增加霸道功能的reflector out。

Reflector 已经out了,试试ILSpy

ilspy的界面与reflector相似,左边以树型控件显示程序集和它的类型,右边是对应的源代码。基础的反编译功能,与reflector相比,丝毫不差,甚至有时候用reflector无法反编译(因为加密)的程序集,用ilspy可以反编译。 

基础的类型反编译功能都具备,现在只支持把源代码反编译为c#和il语言,不支持vb。

Reflector 已经out了,试试ILSpy

当需要找的程序集是.net框架时,可以直接从菜单file—open from gac中打开需要查看源码的程序集。

Reflector 已经out了,试试ILSpy

代码保存功能也做得不错,当点击一个类型时,选择file->save code会反编译当前的类型并保存到指定的文件中,当选择程序集时,save code保存为一个项目(csproj)文件,并且把它所有的类型加到这个项目中。

这里要说的调试器,不是指visual studio的源码级别的调试器,而是指程序集的调试器。reflector有个addin,可以直接附加在visual studio中,调试第三方的类型库,而不需要把第三方的类型库反编译后,以源码的形式添加到项目中。

ilspy也有这个功能,直接对第三方的程序集进行调试,有两种选项

如果第三方类型库是可执行程序(exe),可以用debug an executable来启动这个程序。

如果第三方类型库是程序集(dll),可以用attach to running application来附加,以启动程序集的调试。

Reflector 已经out了,试试ILSpy

从上面两张图中已经可以看出它的用法,和调试源代码一样。在需要监视变量值的方法的地方,设置断点,当程序运行到此时,就可以通过监视窗体来观察变量的值。从ilspy的状态栏中看出,上面的第一张图是正处于调试状态,第二张图,是准备就绪,可以进行调试。

这两者的区别是,attach to a running application调试时,如果代码经过编译器优化,则监视器会无法得到它的值。

Reflector 已经out了,试试ILSpy

如图所示,无法显示正在调试的变量num的值,因为代码已经经过优化。官方推荐的方式是debug an executable

与在visual studio中调试.net源代码一样,你可以step into,step over,continue,同时状态栏会显示就绪(stand by),运行中(running),正在调试(debugging)。

Reflector 已经out了,试试ILSpy

除了调试程序集的c#/vb形式的代码之外,也可以以il代码形式调试,如下图所示

Reflector 已经out了,试试ILSpy

由此看来,这还是相当不错的调试il代码的工具。工具可以促进学习的效果,学习领悟之后,又可以推进工具的发展,这就是知识的无止境的发展。

ilspy的debugger是以插件形式存在的,请确保包含ilspy.debugger的plugin。

Reflector 已经out了,试试ILSpy

根据我们的理解,调试.net程序集一定需要pdb文件才可以。然而ilspy却没有产生pdb文件(no pdb files are generated),而且它不可以调试asp.net web application和web 服务。 

这其中的原理,不甚明白。compiler/debugger一直是我喜爱的技术主题,但学识肤浅,无法分享。 

reflector会检测到系统时间超过了它预设的时间,如果不升级,它会主动删除自己,从你的电脑中out掉。如果你对此很烦恼,那就让它out吧,你可以有另一个选择,试试ilspy,或许会带来一丝的惊喜。

<a target="_blank" href="http://www.cnblogs.com/jamesli2015/archive/2011/09/08/2170519.html">原文地址</a>

继续阅读