使用Reflector.FileDisassembler反编译DLL

转自http://www.cnblogs.com/wuliangbo

Reflector for .NET 下载地址:http://www.aisto.com/roeder/dotnet/

Reflector.FileDisassembler.dll cs文件的工具下载地址 : http://www.denisbauer.com/Downloads/Reflector.FileDisassembler.zip

1.下载Reflector.FileDisassembler.zip,解压后得到一些文件,其中Reflector.FileDisassembler.dll是已经编译好的,其它是它源码;

2.打开Reflector,在view菜单下的Add-Ins,将Reflector.FileDisassembler.dll添加到里面;

3.open一个dll,exe,或mcl为后缀的文件,当然要支持.net的

4.选择要反编译的dll(会在列表中显示),选择Tools->File Disassembler,在右窗口会出现设置存放源码位置的路径,点击产生就可以了!

但是使用FileDisassembler编译成CS文件会有一个Bug, 就是变量、类和名称空间有时会重命名。

幸好FileDisassembler发布的时候带有源代码,也就省得去Reflect一把了,毕竟机器生成的临时变量名看起来还是很不爽的。修复这个bug很简单,修改了一下CreateFile方法,同时添加了一个GetUniqueFileName方法,源代码如下:

private StreamWriter CreateFile(string directory, string fileName) 

    directory 
= directory.Replace("<""_"); 
    directory 
= directory.Replace(">""_"); 
    directory 
= directory.Replace(":""_"); 
    directory 
= directory.Replace("|""_"); 
    directory 
= directory.Replace("?""_"); 
    directory 
= directory.Replace("*""_"); 
    directory 
= Path.Combine(this.outputDirectory, directory); 
 
    ILanguage language 
= this.LanguageManager.ActiveLanguage; 
    
string fileExtension = language.FileExtension; 
 
    fileName 
= fileName.Replace("<""_"); 
    fileName 
= fileName.Replace(">""_"); 
    fileName 
= fileName.Replace(":""_"); 
    fileName 
= fileName.Replace("|""_"); 
    fileName 
= fileName.Replace("?""_"); 
    fileName 
= fileName.Replace("*""_"); 
    fileName 
= Path.Combine(directory, fileName); 
    fileName 
= Path.ChangeExtension(fileName, fileExtension); 
 
    fileName 
= GetUniqueFileName(fileName); 
    
this.WriteLine(fileName); 
 
    directory 
= fileName.Substring(0, fileName.LastIndexOf('""')); 
    
if (!Directory.Exists(directory)) 
    

        Directory.CreateDirectory(directory); 
    }
 
 
    StreamWriter writer 
= new StreamWriter(fileName); 
    
return writer; 
}
 
 
private Hashtable fileNames = new Hashtable(); 
 
private string GetUniqueFileName(string fileName) 

    
string strExtension = Path.GetExtension(fileName); 
    fileName 
= fileName.Replace(strExtension, ""); 
 
    
string _fileName = fileName.ToLower(); 
    
bool bFirstRename = true
    
while(fileNames.Contains(_fileName)) 
    

        
string existFileName = (string)fileNames[_fileName]; 
        
string [] efnParts = existFileName.Split(new char[] '""' }); 
        
string [] fnParts = fileName.Split(new char[] '""' }); 
        
for (int i = 0; i < fnParts.Length; ++i) 
        

            
if (efnParts[i] != fnParts[i]) 
            

                
if (bFirstRename) 
                

                    fnParts[i] 
+= '_'
                    bFirstRename 
= false
                }
 
                fnParts[i] 
+= 'x'
                
break
            }
 
        }
 
        fileName 
= string.Empty; 
        
for (int i = 0; i < fnParts.Length; ++i) 
        

            fileName 
+= '""' + fnParts[i]; 
        }
 
        fileName 
= fileName.Substring(1); 
        _fileName 
= fileName.ToLower(); 
    }
 
    fileNames[_fileName] 
= fileName; 
    
return fileName + strExtension; 
}

转载于:https://www.cnblogs.com/ceci/archive/2009/08/21/1551703.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html5 type submit,input type=submit

"submit"类型的元素呈现为提交按钮 - 单击一个将尝试提交表单到服务器。值用作按钮标签的DOMString活动点击支持的通用属性类型和价值IDL属性值方法没有值元素的value属性包含一个 DOMString作为按钮的标签如果你不指定一个value&#xff0c;你会得到一个默认标签&am…

NOD32最新升级ID

2009年08月20日NOD32最新升级ID —————————————————————————— 两个EAV激活码&#xff1a; M26F-0233-3WRA-7M6W-H4QL-8K7J M26F-0233-3WRA-8DET-U646-T94T 用户名 密码 版本 EAV-19640855 - rtr3afv8pa >> ess E…

链表 - Part I

链表是一种物理存储单元上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点&#xff08;链表中每一个元素称为结点&#xff09;组成&#xff0c;结点可以在运行时动态生成。每个结点包括两个部分&#xff1a;一个是…

modelsim6.5b安装和仿真bug

(一)由于6.3以下的需要装smart model&#xff0c;因此就选了6.5b的新版本&#xff0c;在安装完了之后需要对modelsim.ini进行修改&#xff1a;1.把 Resolution ns 改成 Resolution ps2.把 PathSeparator / 用&#xff1b;注释掉3.找到Veriuser并改成&#xff08;去掉注释&am…

jer中无html文件,index.html

Remember that “all things are possible to the one whobelieves.” (Mark 9:23)Remember that “what is impossible with men is possiblewith God.” (Luke 18:27)Remember “whenever you stand praying, forgive, if youhave anything against anyone; so that your Fat…

IOS https抓包及10.3.3版本证书不生效问题解决

Charles安装HTTP抓包HTTPS抓包1. Charles安装 官网下载安装Charles:https://www.charlesproxy.com/download/ 2. HTTP抓包 &#xff08;1&#xff09;查看电脑IP地址 &#xff08;2&#xff09;设置手机HTTP代理iphone连上wifi&#xff0c;点击“设置->无线局域网->连接的…

C# 备忘

1.使用partial来修饰类和结构&#xff0c;运行跨多个*.cs文件来定义c#类型。类型名必须是一致的&#xff0c;并且定义在相同的.NET命名空间中。 2.C#提供了关键字sealed来防止发生继承&#xff0c;如果将类标记为sealed&#xff0c;编译器将不会允许我们从这个类型派生。有时不…

计算机网络上网时间,电脑怎么限制上网时间

孩子的学习和娱乐都离不开电脑,很多事情的完成都是需要借助电脑,但其负面影响也逐渐体现下面是学习啦小编为大家整理的关于电脑怎么限制上网时间&#xff0c;一起来看看吧!电脑怎么限制上网时间先登录路由器主页。如果知道家长和孩子电脑的Mac地址的可以直接跳到第四步。很多人…

与protected成员有关的单元测试方式

这是一篇简单的文章&#xff0c;讨论了单元测试中遇到protected成员的应对方案。此外&#xff0c;在文章最后也希望和大家讨论一下某个特殊的情况下的处理方法。 protected是一个有趣而有用的修饰符&#xff0c;它把方法的访问成员严格限制在自身或自己的子类身上。换句话说&am…

计算机画面的音乐素材,音效素材:高科技用户界面UI点触计算机数据分析全息音效合集...

音效素材&#xff1a;高科技用户界面UI点触计算机数据分析全息音效合集包含1000多组模块化用户界面音效&#xff0c;由最好的制造商“EURORACK”亲自录制。MODULAR UI是由世界著名的音响设计师和音乐家理查德迪瓦恩共同创建的一个用户界面音效库。设计并完全由理查德迪瓦恩的个…

cacti安装FAQ

为什么80%的码农都做不了架构师&#xff1f;>>> CACTI中MSN和EMAIL不能同时预警 描述 CACTI中使用thold可以实现邮件的预警&#xff0c;超过阀值的时候&#xff0c;基本上可以在半个小时之内把邮件发出来&#xff0c;这种方式是比较稳定的方式。 另外可以使用MSN…

初中计算机新课标培训心得,新课标学习心得体会

新课标学习心得体会由好范文网的会员投稿精心推荐&#xff0c;小编希望以下6篇范文对你的学习工作能带来参考借鉴作用。第1篇&#xff1a;新课标学习心得体会新课标学习心得体会怎么写&#xff1f;以下是我们给你的范文格式参考。用课余时间我认真学习了中心校下发的小学品德与…

利用原生js做数据管理平台

摘要&#xff1a;数据管理平台在当今社会中运用十分广泛&#xff0c;我们在应用过程中&#xff0c;要对数据进行存储&#xff0c;管理&#xff0c;以及删除查询等操作&#xff0c;而我们在实际设计的时候&#xff0c;大牛们大多用到的是JQuery&#xff0c;而小白对jq理解也较困…

ios 阅览器html5,HTML5测试:iOS 8浏览器Safari提升明显

没错&#xff0c;日前&#xff0c;国外著名手机网站GSMArena就发现iOS 8中的Safari浏览器确实增强了对HTML5的支持。如下图所示&#xff0c;在HTML5test.com的数据库中&#xff0c;新版本Safari得到的分数为440(满分为550)&#xff0c;相比iOS 7中的Safari的412分来说还是有不小…

RAID冗余技术的介绍AND实现

一、RAID技术规范简介 RAID技术主要包含RAID 0&#xff5e;RAID 7等数个规范&#xff0c;它们的侧重点各不相同&#xff0c;常见的规范有如下几种&#xff1a; RAID 0&#xff1a;RAID 0连续以位或字节为单位分割数据&#xff0c;并行读/写于多个磁盘上&#xff0c;因此具有很高…