zoukankan      html  css  js  c++  java
  • 20080811 使用Reflactor反编译.Net程序的经验


    相信大多数.Net程序员都有使用Reflactor的经历。无论出于什么目的,当用Reflactor反编译托管程序后,还想对其代码加以修改,那么本文所列举的可能是一份有用的参考。

    用Reflactor的FileGenerator插件反编译代码后可以得到包括项目文件的源代码,但代码中存在各种问题,一般无法一次编译通过,以下将详谈这些问题:


    枚举问题

     

    为了代码可读,可能需要花点时间查阅metadata把int值修改回枚举值,尤其是想利用窗体设计器的,VS2008可能还不理解int值。


    属性问题

     

    比如一个叫Names的属性被反编译后,可能还原为的set_Names(names),get_Names()方法,逐个替换可能很慢,可采用正则表达式整体替换。
    对于set_Xxx(xxx)方法,可替换
    set_{[a-z]*}\(

    \1 = (
    对于get_Xxx()方法,可替换
    get_{[a-z]*}\(\)

    \1
    然后,再修复个别被误换的方法。


    委托和回调函数问题

     

    一般会被还原为add_Xxx(MethodsName)方法,需要改为 += MethodsName


    资源问题

     

    需要使用.Net Framework SDK 下的 resgen.exe 工具,反编译嵌入资源文件*.resources为*.resx文件,
    语法为:ResGen.exe *.resources *.resx,然后将*.resx包含入项目,就会自动和同名的窗体文件*.cs关联,如果没有关联可采用先排除再添加大法,一一搞定。


    命名空间问题

     

    如果需要切换到IDE的窗体设计器,而不出错,则还需要在*.cs中添加比如System.Windows.Forms的命名空间前缀。


    窗体设计器识别问题

    需要把以下代码
    ComponentResourceManager manager = new ComponentResourceManager(typeof(ClassName));
    替换为
    System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ClassName));
    窗体设计器才能正常识别。

  • 相关阅读:
    PAT Advanced 1008 Elevator (20) [数学问题-简单数学]
    PAT Advanced 1051 Pop Sequence (25) [栈模拟]
    PAT Basic 完美数列(25) [two pointers]
    PAT Basic 插⼊与归并(25) [two pointers]
    PAT Advanced 1089 Insert or Merge (25) [two pointers]
    第五章 数据的共享和保护
    第四章 面向对象程序设计的基本特点 课堂笔记
    第三章 函数 课堂笔记
    扫描线-Meteor UVALive
    贪心-Stall Reservations POJ
  • 原文地址:https://www.cnblogs.com/likun/p/1265008.html
Copyright © 2011-2022 走看看