以前一直使用reflector来查看.net类库的一些信息,不过,自2011年2月份开始,reflector就开始转向收费软件了,所以爱好免费软件的开发者们转而开发自己的反编译软件。于是ILspy就因运而生了。ILSPY这个开源工具的目的就是代替reflector的,它反编译出的代码和reflector差不多。

SharpDevelop 是除Visual Studio外,另一个可选择的唯一的.NET开放工具,并且它是开源的。它提供的功能也相当不错,几乎就是在重写Visual Studio。最新的版本中,直接增加了对Visual Studio的解决方安案文件和项目文件的支持。ILSpy是SharpDevelop小组的反编译工具,也是开放源代码的,下面介绍一下它的调试器和反编译器。

ILspy的界面截图

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

ILspy需要在电脑上安装.NET Framework 4.0.
 
 
ILspy常用的几个功能
 

基础的类型反编译功能都具备

现在只支持把源代码反编译为C#和IL语言,不支持VB。

效果图为:

ILSpy的代码保存功能

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

ILSpy的调试器功能

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

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

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

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

从上图中已经可以看出它的用法,和调试源代码一样。在需要监视变量值的方法的地方,设置断点,当程序运行到此时,就可以通过监视窗体来观察变量的值。

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

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

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

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

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

不过调试.NET程序集一定需要PDB文件才可以。然而ILSpy却没有产生PDB文件(no PDB files are generated),而且它不可以调试ASP.NET Web application和Web 服务。

ILSpy反编译工具的使用的更多相关文章

  1. 通过ILSpy反编译工具和ilasm修改.NET程序

    文章来源:https://blog.peos.cn/2016/12/26/ilspy-ilasm-ildasm-net.html 金庸群侠传X中,田青文.木婉清.王语嫣的点穴游戏忒难过了,所以上网摸索 ...

  2. ILSpy反编译工具之C#反汇编

    1.下载ILspy工具 https://github.com/icsharpcode/ILSpy#ilspy------- 注意: ILspy需要在电脑上安装.NET Framework 4.0.   ...

  3. ILspy反编译工具

    简介 ILspy是一个开源的.net反编译软件,使用十分方便. 开发原因 之所以开发ILspy是因为Red Gate宣布免费版的.NET Reflector(同样是反编译软件)将会在2011年2月停止 ...

  4. ILSPY反编译工具下载代替收费的Reflector工具

    原文发布时间为:2011-10-10 -- 来源于本人的百度文章 [由搬家工具导入] ILSPY反编译工具下载 http://build.sharpdevelop.net/BuildArtefacts ...

  5. C#反编译工具ILSpy 反汇编

    ILSpy反编译工具之C#反汇编   1.下载ILspy工具 https://github.com/icsharpcode/ILSpy#ilspy------- 注意: ILspy需要在电脑上安装.N ...

  6. 反编译工具Reflector ILSpy

    最近很长一段时间在为自己技术方便该如何做才会有新的长进而发愁,偶然,顿悟,决定通过反编译工具了解底层代码来进一步提升自己的能力. 于是有了周末宅在家里一天研究反编译工具. 不能浪费了一天的成果,至此, ...

  7. ILSpy,DLL反编译工具,学习与了解原理的好帮手

    你是否一直苦于找到了好的dll却只知道怎么使用而不知道其原理. 你是否在使用一个dll的时候发现它在一些参数时报错了却没法解决. 你是否想成为一个优秀的.net开发,成为一个优秀的系统制造者. 那你需 ...

  8. .net程序反编译工具(ILSpy)

    ILSpy是SharpDevelop小组的反编译工具,ILSPY这个开源工具的目的就是代替reflector的,它可以反编译出比reflector更好的C#代码. PC官方版 C#反编译工具ilspy ...

  9. 工欲善其事,必先利其器 软件工具开发关键词 protractor自动化测试工具 RegexBuddy正则 CodeSmith,LightSwitch:代码生成 CheatEngine:玩游戏修改内存值必备神器 ApkIDE:Android反编译工具 Reflector:反编译dll动态链接库

    工欲善其事,必先利其器 本文版权归翟士丹(Stan Zhai)和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利. 原文地址:http ...

随机推荐

  1. naotu.baidu.com 非常棒的脑图在线工具

    1.png 2.txt 短租 前台功能 房源查看 房源搜索 城市房源 注册登录 预定房源 房源退订 在线支付 评价房源 个人中心 我的订单 我的账户 我的收藏 消息通知 管理员后台 房源发布 会员管理 ...

  2. cf A. Inna and Pink Pony(思维题)

    题目:http://codeforces.com/contest/374/problem/A 题意:求到达边界的最小步数.. 刚开始以为是 bfs,不过数据10^6太大了,肯定不是... 一个思维题, ...

  3. 将archlinux 2013-06-01版,安装配置为个人工作站

    本文安装所使用的镜像为:archlinux-2013.06.01-dual.iso.首先请看看我安装完成之后的效果.图一,是第一个虚拟桌面及右键菜单图: 图二,是第二个虚拟桌面效果图.后几个虚拟桌面图 ...

  4. ↗☻【编写可维护的JavaScript #BOOK#】第8章 避免“空比较”

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  5. 【转】android的消息处理机制(图+源码分析)——Looper,Handler,Message

    原文地址:http://www.cnblogs.com/codingmyworld/archive/2011/09/12/2174255.html#!comments 作为一个大三的预备程序员,我学习 ...

  6. poj 3279 Fliptile

    题意:一个n * m的棋盘,0或1,每次改变一个格子时同时改变上下左右的格子,问用最少次数将棋盘全变成0的策略. 题解:用二进制压缩第一行更改的状态,之后遍历棋盘,如果当前格子为1则改变下方的格子,记 ...

  7. LightOJ 1422 Halloween Costumes 区间dp

    题意:给你n天需要穿的衣服的样式,每次可以套着穿衣服,脱掉的衣服就不能再穿了,问至少要带多少条衣服才能参加所有宴会 思路:dp[i][j]代表i-j天最少要带的衣服 从后向前dp 区间从大到小 更新d ...

  8. lightoj 1018 (状态压缩DP)

    设dp[s]表示状态s下所需要的线段的个数,s的二进制中第x位为1就表示该状态下第x个点没被线段覆盖.需要预处理出来在任意两点之间连线所覆盖点的状态O(n^3),然后记忆化搜索即可. #include ...

  9. [JDBC-1] JDBC Base Template

    以Statement建立的标准模板: static void template() throws Exception { Connection conn = null; Statement st = ...

  10. 常规页生命周期(class0620)

    常规页声明周期阶段 阶段                   说明 页请求 开始 页初始化 加载 验证 回发事件处理 卸载 生命周期事件 页事件               典型使用