Reflector 已经out了,试试ILSpy

标签: reflector out ilspy | 发表时间:2011-09-08 09:08 | 作者:James Li Lee
出处:http://www.cnblogs.com/

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

image

这里的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。

clip_image001

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

Decompiler 反编译器

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

clip_image001[19]

当需要找的程序集是.NET框架时,可以直接从菜单File—Open from GAC中打开需要查看源码的程序集。

image

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

 

Debugger 调试器

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

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

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

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

clip_image001[7]

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

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

clip_image001[9]

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


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

clip_image001[11]

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

clip_image001[13]

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

ILSpy的debugger是以插件形式存在的,请确保包含ILSpy.Debugger的Plugin。

clip_image001[15]

根据我们的理解,调试.NET程序集一定需要PDB文件才可以。然而ILSpy却没有产生PDB文件(no PDB files are generated),而且它不可以调试ASP.NET Web application和Web 服务。
这其中的原理,不甚明白。compiler/debugger一直是我喜爱的技术主题,但学识肤浅,无法分享。

 

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

作者: James Li 发表于 2011-09-08 09:08 原文链接

评论: 47 查看评论 发表评论


最新新闻:
· Windows 8 版 Bing 应用将于下周发布?附截图和体验地址(2011-09-08 18:36)
· Google 应对甲骨文可能失利 & One more thing(2011-09-08 18:05)
· 巴茨任职期15 瞬间 :裁员 爆粗口 拒绝售股(2011-09-08 17:34)
· Ruby作者松本行弘将推出针对移动计算的Ruby分支(2011-09-08 17:30)
· Xbox 360名列8月美国畅销游戏机第一(2011-09-08 17:22)

编辑推荐:用ASP.NET写自己的服务框架

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库

相关 [reflector out ilspy] 推荐:

Reflector 已经out了,试试ILSpy

- Lee - 博客园-首页原创精华区
Reflector是.NET开发中必备的反编译工具. 即使没有用在反编译领域,也常常用它来检查程序集的命名规范,命名空间是否合理,组织类型的方法是否需要改善. 举例说明,它有一个可以查看程序集完整名称的功能,请看下图. 这里的Name,是标识一个程序集的完整标识,当GAC中存在程序集的多个版本时,这个名称是唯一的识别名称.

替代Reflector的反编译软件ILSpy 1.0正式发布了,挺好用

- Bloger - 博客园-首页原创精华区
.NET Reflector 2011 2月已经结束提供免费版本,催生了另一个开源的项目ILSpy. ILSPY这个开源工具的目的就是代替reflector的,它可以反编译出比reflector更好的C#代码,1.0版本支持C#,2.0版本将支持VB:. 下载地址 http://wiki.sharpdevelop.net/ilspy.ashx.

不懂朗姆酒?那你就out了!

- 俊 - 东西
朗姆酒在以前只有两种:纯的白色朗姆酒,和纯的加香朗姆酒. 然而近些年有一些有名的调酒师用其作为原料调制Tiki特饮(一种夏威夷的饮料),你还可以用很便宜的价格选择如同苏格兰单一麦芽威士忌一样复杂而美味的朗姆酒. 简单的来说,朗姆酒就是:任何由甘蔗或甘蔗副产品经蒸馏而成的酒. 朗姆酒不像由原产地和制造方法所定义的苏格兰威士忌和波本威士忌,它的分类界限比较宽泛.

Time Out Beijing:北京城中鲜为人知的书店

- Xiaoyu - 每日鲜果精选
Page One书店 —— 为你省钱. 这家书店成立于2011年4月,作为一个相对较新的书店,PageOne付出了很大的努力来营造出一种安逸而富于当代气息的环境,在选择图书方面兼顾了实用与美观两个特质,而且价格公道,所以吸引了很多当地的书虫. 让我们颇为惊奇的是他们那非同寻常的创意点子——书店也收藏了日本出版的图书.

这些个网站你要是没进过,那你就OUT了

- helen - 天堂电影小组 – Mtime时光网
1.邻居的耳朵 http://kxt.fm . 一个小小的迷你网站,非商业,不盈利. 谈论音乐,文字,生活,时光,有观点的聆听,讲述音乐背后的故事与情感. 有一个好记的网址:http://kxt.fm. 2.性能很好的免费网络硬盘——云盘网(10G免费超大空间哦,支持共享,可加密文件)http://www.diskes.com/ .

Time Out Beijing:肉搏混战——京城汉堡大比拼

- sissi - 东西
冠军:北京布鲁宫法餐厅(Maison Boulud à Pékin). 布鲁宫的鹅肝汉堡(168元)在京城闻名遐迩,不是没有道理的——这款汉堡有着俄罗斯套娃一般的精巧结构:最外面是西冷牛肉与和牛牛肉的肥瘦混搭,接下来是一层美味的红酒炖牛仔骨肉,最里面则包裹着肥腴多汁的鹅肝,仅在午饭时间提供. 请尽量不要五分钟就把它干掉……虽然的确很难控制自己的嘴…….

《IT狂人》第四季开始了!还没看你就out了!

- Zifei Tong - 笨活儿的前端开发和网页设计 - Beleben Design
去年发现的《IT狂人》(The IT Crowd),超级喜欢,从破烂熊下了前三季,三天之内一口气看完,真的是爽到爆啊. 于是,这部剧一跃成为了我最喜欢的情景喜剧. )说真的,之前确实没遇到过这种可以让我放声大笑出来的东西. 是的,没有会心一笑,要笑就是大笑啊. 看完之后,那是相当的意犹未尽,可惜当时第三季刚刚结束,只能继续等啊等.

Out of Milk Shopping List 用Android打點大賣場購物清單

- lichzy - 電腦玩物
柴米油鹽醬醋茶這些生活必需品總是要我們定期去做一番採買,但一長串購物清單如果沒有事先管理,難免會漏東漏西,或者不小心買到家裡冰箱早已有存貨的物品. 而對於智慧型手機用戶來說,利用各種App來建立購物清單、存貨清單,應該會比紙本記錄更有彈性吧. 可以製作購物清單的軟體非常多,基本上你可以用Evernote建立購物清單,也可以用Remember the Milk建立採買列表.

【 Time Out Beijing】五件厨具打造完美厨房

- pnedfff@swu&hasee - 东西
在北京,最好的炒锅由当地铸铁打造而成,以良好的导热性而声名远播. 如果使用者小心应用、精心呵护的话,炒锅表面会形成一个天然的防粘涂层(唯有清洗出厂残余时需要洗洁精,平时以清水冲刷即可),使用多年都经久不坏. 碳钢型新品锅具也很不错,但是你应该对那些号称“不糊不粘”的锅具敬而远之,谨慎选择. 地址:北京市东城区东四北大街119号(6403 3710).