原文:http://www.cnblogs.com/JamesLi2015/archive/2011/09/08/2170519.html#3406308

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,或许会带来一丝的惊喜。

.NET 反编译工具相关推荐

  1. 反编译工具jad简单用法

    反编译工具jad简单用法 下载地址: [url]http://58.251.57.206/down1?cid=B99584EFA6154A13E5C0B273C3876BD4CC8CE672& ...

  2. ILSpy可以反编译c语言,ILSpy反编译工具的使用

    本文导读:ILSpy反编译工具的使用.不过,ILspy需要在电脑上安装.NET Framework 4.0.ILspy可以将一个dll文件转换为C#或VB语言.ILspy对于单个文件可以保存为.cs文 ...

  3. 一些Java反编译工具/源代码查看工具的介绍

    2019独角兽企业重金招聘Python工程师标准>>> 有的朋友抱怨他们在使用他们公司的闭源框架时看不到底层的源代码.那么可以尝试使用一些Java反编译工具. 下面我举个例子介绍具体 ...

  4. bat小工具_小程序反编译工具在windows系统下的调用脚本

    点击上方蓝字可以订阅哦 之前的文章中介绍了小程序的反编译工具,工具在 Linux 系统下使用时执行bingo.sh [xxx.wxapkg]就可以. 有小伙伴不知道在windows系统下如何使用,这里 ...

  5. 给大家推荐一个.Net的混淆防反编译工具ConfuserEx

    给大家推荐一个.Net的混淆防反编译工具ConfuserEx. 由于项目中要用到.Net的混淆防反编译工具. 在网上找了很多.Net混淆或混淆防反编译工具,如.NET Reactor.Dotfusca ...

  6. NEO智能合约反编译工具

    2019独角兽企业重金招聘Python工程师标准>>> 0x00 前言 下拉最后看演示效果.项目地址 本来这应该是一个很和谐的感恩节假期,本来我可以很悠闲的写完所有作业然后随便看点论 ...

  7. apk反编译工具-apktool

    apk很easy被反编译,关于这篇文章apktool反编译工具. (一)优势反编译 1.能学习别人优秀代码 看看优秀apk他们的string.color命名规则,看看布局排版等都能学习到东西. 2.进 ...

  8. Eclipse反编译工具Jad及插件JadClipse配置

    Jad是一个Java的一个反编译工 具,是用命令行执行,和通常JDK自带的java,javac命令是一样的.不过因为是控制台运行,所以用起来不太方便.不过幸好有一个eclipse的 插件JadClip ...

  9. 【Android 安全】DEX 加密 ( 常用 Android 反编译工具 | apktool | dex2jar | enjarify | jd-gui | jadx )

    文章目录 一.apktool 1.apktool 简介 2.直接解压 3.使用 apktool 反编译 4.使用 apktool 重新打包 二.dex2jar 1.dex2jar 简介 2.dex2j ...

  10. java反编译工具_漫话:如何给女朋友解释什么是编译与反编译

    戳蓝字"CSDN云计算"关注我们哦! 来源 | 漫话编程 某天下班后,我在家里进行电话面试,问到面试者这样一个问题:"你知道使用哪些办法可以反编译Java代码吗?&quo ...

最新文章

  1. [LeetCode] Linked List Cycle
  2. 从数组中间位置添加元素:unshift()方法的有一种运用
  3. linux中常用的头文件
  4. ASP.NET AJAX in Action—ScriptManager异常处理示例
  5. 为企业搭建Gitlab软件版本管理服务器
  6. String通过“+”号拼接字符串的底层实现
  7. ​​公众平台测试账号 开通 配置
  8. 用HTML代码实现个人简历的编写
  9. java ipv6 转换_Java中Ipv4与Ipv6的转换
  10. hdu11601087
  11. 腾讯云轻量应用服务器怎么用?配置搭建网站教程
  12. c 语言rand()生成随机数
  13. kaggle房价预测
  14. 【基于物理的渲染(PBR)白皮书】(五)几何函数相关总结
  15. 【SSL】2022.5.2 1125.集合
  16. 目前 计算机硬件系统,计算机硬件系统练习题.doc
  17. 股票6题(Aced)
  18. OGG REPA进程 Error ORA-01031报错处理
  19. “逻辑和”与 “逻辑或”运算符
  20. Linux Suse修改主机名hostname

热门文章

  1. 怎么修复SONY索尼相机摄像机断电死机损坏的MP4视频文件
  2. Date与tring的转化
  3. 【尚硅谷_java基础】十五、网络编程
  4. 1248 - Every derived table must have its own alias
  5. Alpine安装与使用
  6. exe4j将jar转exe时出现的ClassNotFoundException解决办法
  7. ora-12505错误
  8. Linux 修改系统时间的两种方式
  9. 联想小新Pro 16频繁蓝屏解决方案
  10. 2019年最新出搜索引擎蜘蛛网页爬虫大全