黄聪:免费C#反编译软件工具。Reflector已经out了,试试ILSpy吧
转载自:http://www.cnblogs.com/JamesLi2015/archive/2011/09/08/2170519.html
Reflector是.NET开发中必备的反编译工具。即使没有用在反编译领域,也常常用它来检查程序集的命名规范,命名空间是否合理,组织类型的方法是否需要改善。举例说明,它有一个可以查看程序集完整名称的功能,请看下图
这里的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。
ILSpy的界面与Reflector相似,左边以树型控件显示程序集和它的类型,右边是对应的源代码。基础的反编译功能,与Reflector相比,丝毫不差,甚至有时候用Reflector无法反编译(因为加密)的程序集,用ILSpy可以反编译。
Decompiler 反编译器
基础的类型反编译功能都具备,现在只支持把源代码反编译为C#和IL语言,不支持VB。
当需要找的程序集是.NET框架时,可以直接从菜单File—Open from GAC中打开需要查看源码的程序集。
代码保存功能也做得不错,当点击一个类型时,选择File->Save Code会反编译当前的类型并保存到指定的文件中,当选择程序集时,Save Code保存为一个项目(csproj)文件,并且把它所有的类型加到这个项目中。
Debugger 调试器
这里要说的调试器,不是指Visual Studio的源码级别的调试器,而是指程序集的调试器。Reflector有个Addin,可以直接附加在Visual Studio中,调试第三方的类型库,而不需要把第三方的类型库反编译后,以源码的形式添加到项目中。
ILSpy也有这个功能,直接对第三方的程序集进行调试,有两种选项
如果第三方类型库是可执行程序(EXE),可以用Debug an executable来启动这个程序。
如果第三方类型库是程序集(DLL),可以用Attach to running application来附加,以启动程序集的调试。
从上面两张图中已经可以看出它的用法,和调试源代码一样。在需要监视变量值的方法的地方,设置断点,当程序运行到此时,就可以通过监视窗体来观察变量的值。从ILSpy的状态栏中看出,上面的第一张图是正处于调试状态,第二张图,是准备就绪,可以进行调试。
这两者的区别是,Attach to a running application调试时,如果代码经过编译器优化,则监视器会无法得到它的值。
如图所示,无法显示正在调试的变量num的值,因为代码已经经过优化。官方推荐的方式是Debug an executable
与在Visual Studio中调试.NET源代码一样,你可以Step into,Step over,continue,同时状态栏会显示就绪(stand by),运行中(running),正在调试(debugging)。
除了调试程序集的C#/VB形式的代码之外,也可以以IL代码形式调试,如下图所示
由此看来,这还是相当不错的调试IL代码的工具。工具可以促进学习的效果,学习领悟之后,又可以推进工具的发展,这就是知识的无止境的发展。
ILSpy的debugger是以插件形式存在的,请确保包含ILSpy.Debugger的Plugin。
根据我们的理解,调试.NET程序集一定需要PDB文件才可以。然而ILSpy却没有产生PDB文件(no PDB files are generated),而且它不可以调试ASP.NET Web application和Web 服务。
这其中的原理,不甚明白。compiler/debugger一直是我喜爱的技术主题,但学识肤浅,无法分享。
Reflector会检测到系统时间超过了它预设的时间,如果不升级,它会主动删除自己,从你的电脑中out掉。如果你对此很烦恼,那就让它out吧,你可以有另一个选择,试试ILSpy,或许会带来一丝的惊喜。
黄聪:免费C#反编译软件工具。Reflector已经out了,试试ILSpy吧的更多相关文章
- .NET反编译之Reflector
.NET反编译之Reflector 这几日由于公司需要, 看了些.NET反编译技巧,特地和大家分享下 .NET反编译工具很多,Reflector是其中一个很优秀的工具,所以就用它来进行反编译工作了.今 ...
- 工欲善其事,必先利其器 软件工具开发关键词 protractor自动化测试工具 RegexBuddy正则 CodeSmith,LightSwitch:代码生成 CheatEngine:玩游戏修改内存值必备神器 ApkIDE:Android反编译工具 Reflector:反编译dll动态链接库
工欲善其事,必先利其器 本文版权归翟士丹(Stan Zhai)和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利. 原文地址:http ...
- 反编译工具Reflector ILSpy
最近很长一段时间在为自己技术方便该如何做才会有新的长进而发愁,偶然,顿悟,决定通过反编译工具了解底层代码来进一步提升自己的能力. 于是有了周末宅在家里一天研究反编译工具. 不能浪费了一天的成果,至此, ...
- .NET反编译之Reflector基础示例
这几日由于公司需要, 看了些.NET反编译技巧,特地和大家分享下 .NET反编译工具很多,Reflector是其中一个很优秀的工具,所以就用它来进行反编译工作了.今天我们就用"繁星代码生成器 ...
- 反编译工具Reflector下载(集成FileGenerator和FileDisassembler)
Reflector是一款比较强大的反编译工具,相信很多朋友都用过它,但reflector本身有很多局限性, 比如只能一个一个的查看方法等,但幸好reflector支持插件功能目前网上有很多reflec ...
- vs 2019 自带 反编译 与 Reflector 反编译工具比较
都是一样的 但是要看自己写的 反编译代码 还是得去 Reflector
- 破解C#反编译软件Reflector 11.1.0.2167(最新版)(附补丁下载)
本文为原创作品,转载请注明出处,作者:Chris.xisaer E-mail:69920579@qq.com QQ群3244694 补丁下载地址:https://download.csdn.net/d ...
- 反编译工具reflector破解方法
文件下载:http://files.cnblogs.com/lori/Red.Gate.Reflector7.6.rar 破解方法: 1. 断网2. 运行.NET Reflector,点击Help - ...
- .net反编译工具Reflector下载(转)
原文发布时间为:2010-10-23 -- 来源于本人的百度文章 [由搬家工具导入] 打开Reflector工具并且下载了一个FileDisassembler插件,FileDisassembler插件 ...
随机推荐
- 跨域问题Java方式解决及Nginx方式解决【亲测可行】
这两天和前端同事调试微信公众号项目,就遇到了跨域问题:网上相关博客也挺多的,但有很多细节没有点到,在此呢我也再次记录一下解决方式: (算是踩坑日记吧~ ~ ~) !问题发现: 页面加载不出来,控制 ...
- NPOI自定义单元格背景颜色
经常在NPOI群里聊天时发现有人在问NPOI设置单元格背景颜色的问题,而Tony Qu大神的博客里没有相关教程,刚好最近在做项目时研究了一下这一块,在这里总结一下. 在NPOI中默认的颜色类是HSSF ...
- C++多线程1.createthread
C++ 多线程知识1.多线程入门 CreateThread 20131021 1.介绍WinAPI中的CreateThread 函数原型: HANDLE WINAPI CreateThread( LP ...
- eureka -1 - 介绍
eureka ,服务发现注册中心 eureka 包含server, client两部分. eureka server,服务发现组件,各个微服务启动的时候会向server注册自己的信息(ip,hostn ...
- js 验证对象是否为数组
一.方法一:用到了原型 由于typeof检测数组,只会显示其为object,并不会详细到告诉我们是否为array,所以我们可以自己写个js用原型来检测: <script> /** * * ...
- Linux:uniq命令详解
uniq uniq命令用于报告或忽略文件中的重复行,一般与sort命令结合使用. 语法 uniq(选项)(参数) 选项 -c或——count:在每列旁边显示该行重复出现的次数: -d或--repeat ...
- flowable ContentEngine和ContentEngineConfiguration的关系
一.CommandExecutor ContentEngineConfiguration继承自 AbstractEngineConfiguration. 在 AbstractEngineConfigu ...
- Unity3D查找丢失材质和脚本工具
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解 ...
- [Python] 计算dataframe某一文本维度的平均长度
print np.mean(df.title.apply(lambda x: len(x))) # 24.072694718 print df.title.apply(lambda x: len(x) ...
- jQuery AJAX 与 jQuery 事件
jQuery 本身即是为事件处理而特别设计的,jQuery 事件处理方法是 jQuery 中的核心函数. $(function() { ... }); 是如下格式的缩写: $(document).re ...