
.Net的编程利器Reflector可以反编译基于.net开发的应用程序和DLL,其功能强大不用多说。今天想试验一把利用VS.net的插件断点调试外部无源码的DLL(只要是程序集都可以,所以exe也行)功能。
一.加载VS.net的Reflector插件
从官网下载的Reflector程序(最新版本为6.1.0)包中自带了VS.net的插件,名称为“RedGate.Reflector.Addin.dll”,打开Red Gate’s .Net Reflector程序,选择菜单Tools->Integration Options,打开Integration Options对话框,其支持VS2005/2008/2010三个版本的开发环境,其会自动判断当前系统中安装了哪些开发环境,如果某开发环境不可用,对应选项前会自动灰掉并提示”not installed on this computer”。本文将采用VS2008来进行试验,故确定选择Visual Studio 2008选项。点击OK,就会自动帮我们安装好该插件。安装好后,会在VS2008的开发IDE中添加.NET Reflector顶层菜单和右键菜单。
注意:一旦安装好该插件后,不能对Reflector程序的位置进行移动,否则启动VS.net开发环境,会提示插件已移除,并要求重新进行配置。
二.创建DLL Demo程序
用VS2008创建一个非常简单的DLL,其代码如下:
namespaceDLLDemo
{
publicclassTest
{
publicstringSayHello(stringname)
{

stringmessage ="Hello," name;
returnmessage;
}
}
}
三.反编译DLL Demo代码,并开始断点调试
1.创建新的调用程序工程(ReflectorTest.sln),然后选择菜单.NET Reflector->Choose Assemblies to Debug,出现选择程序集的对话框,默认出现当前加载的.NET framework的命名空间,取消选择全部,因为本试验不想断点调试framework中的代码。点击左下方的Browser按钮,浏览到步骤2开发的DLL:DLLDemo.dll,.NET Reflector将自动开始反编译,结束后如果再次打开选择程序集的对话框,我们选择的DLLDemo.DLL出现在列表中,且为选择状态,如下图所示:

2.在新创建的工程中,添加步骤2开发的DLL引用,添加如下代码:
namespaceReflectorTest
{
classProgram
{
staticvoidMain(string[] args)
{
DLLDemo.Testtest =newDLLDemo.Test();
stringmessage=test.SayHello("Roger");
Console.WriteLine(message);
Console.ReadLine();
}
}
}
3.在上述stringmessage=test.SayHello("Roger");设置断点,运行程序,当运行此行代码中,按下F11,单步调试即可进入DLLDemo的反编译代码。reflector插件仔细观察一下IDE中Test类代码页的上方是只读的,即是反编译代码。reflector插件
后记:
1.VS.net的.Net Reflector插件最新版本是需要激活的,可以采用软件RedGate.Licensing.exe最新版本进行激活,下载地址为,需要注意的是,在激活软件前需要先点击RedGate.Licensing.exe软件最下方的安装,然后将激活码填写到VS.net中的Red Gate’s .Net Reflector激活窗口中,在激活过程中,确保RedGate.Licensing.exe为打开状态。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-42360-1.html
一直到下午四点