惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tailwind CSS Blog
C
CERT Recently Published Vulnerability Notes
P
Proofpoint News Feed
Vercel News
Vercel News
博客园 - 三生石上(FineUI控件)
IT之家
IT之家
Help Net Security
Help Net Security
月光博客
月光博客
N
News and Events Feed by Topic
Cloudbric
Cloudbric
博客园 - 司徒正美
L
LangChain Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tenable Blog
The Register - Security
The Register - Security
The Hacker News
The Hacker News
I
InfoQ
The Last Watchdog
The Last Watchdog
MyScale Blog
MyScale Blog
Schneier on Security
Schneier on Security
WordPress大学
WordPress大学
小众软件
小众软件
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
宝玉的分享
宝玉的分享
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
K
Kaspersky official blog
L
LINUX DO - 热门话题
N
News | PayPal Newsroom
F
Fortinet All Blogs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Security @ Cisco Blogs
Recorded Future
Recorded Future
大猫的无限游戏
大猫的无限游戏
H
Help Net Security
Google Online Security Blog
Google Online Security Blog
S
Schneier on Security
C
Cisco Blogs
N
News and Events Feed by Topic
V2EX - 技术
V2EX - 技术
Latest news
Latest news
PCI Perspectives
PCI Perspectives
T
The Blog of Author Tim Ferriss
P
Palo Alto Networks Blog
T
Tor Project blog
Project Zero
Project Zero
云风的 BLOG
云风的 BLOG
Webroot Blog
Webroot Blog
Attack and Defense Labs
Attack and Defense Labs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org

博客园 - 恋地高飞

超级弹窗代码(P2P,360都拦截不了 sql批量修改表名(前缀)--亲测 baset64加密解密代码 com/c.js木马攻击...(转) asp.net TextBox显示密码 - 恋地高飞 - 博客园 Ext.Window窗口下onclick="Button1_Click",不能提交的问题 IIS7 中使用 UrlRewritingNet(转) 学习SQL Server全文索引 (转 ) 查询同一表内多字段同时重复记录的SQL语句 asp.net中Excel导入(使用微软OLEDB驱动) asp.net获取URL和IP地址 警告: 程序集绑定日志记录被关闭。 Repeater1绑定数据,编辑数据的一些参考文章 asp.net下linkbutton的前后台使用方法 sqlserver 中判断是否数字,是否汉字的方法 301永久重定向asp.net实现方法 Net程序如何防止被注入 UrlRewritingNet 完美实现 ASP.NET 2.0 中的URL重写(映射) (转) FusionCharts一款flash统计控件,可以用于C#
Reflector使用手记
恋地高飞 · 2009-02-27 · via 博客园 - 恋地高飞

转自:http://hi.baidu.com/cgs_cj/blog/item/b6362b4e4c2a89cfd1c86a12.html

Reflector这个强大的类库分析与反编译工具。

需求导入:项目是一个GIS项目,在项目中使用到了ESRI公司的Application Development Framework中的一个WebControls控件,此控件的功能过于复杂,并且引用到了ArcGIS Server的很多COM组件。由于项目根本就没有使用ADF的任何服务器技术,但是也不得不跟着引用一些COM组件,更麻烦的是还得安装ADF(此组件可是有将近200M的庞然大物)。

项目经理需要我解决这种问题并且必须尽快解决,我当时也相应的考虑到了两个方案:

重新写一个类似的控件,此控件只做项目中用到的一些功能,至于其它功能以后再扩展;
利用ESRI的WebControls控件,去掉对COM的所有引用,因为项目没有使用WebControls控件的任何服务器技术,也就无需COM引用

由于时间有限,所以决定采用第二种方案,一开始使用ILDASM分析了Web Server控件的一些类,发现过于类过于庞大。偶然想起了Reflector工具(我以前使用过Reflector工具分析过源代码,不过好久没用),以下是整个解决过程:

打开Reflector工具并且下载了一个FileDisassembler插件,FileDisassembler插件用于输出程序集的反编译结果到文件中。打开Reflector工具,并导入FileDisassembler插件。导入好后加载程序集将反编译结果输出到指定的文件夹中;

Reflector下载地址:http://www.aisto.com/roeder/dotnet 下载时必须输入用户名和Email地址,用户名中必须有空格;

FileDisassembler插件的下载地址:http://www.denisbauer.com/


使用VS.NET新建一个项目,根据文件夹结构新建相应的文件夹,导入所有的源文件和资源文件。使用FileDisassembler导出的资源文件为全名称,在实际的项目中必须根据namespace更改资源文件名且必须将“生成操作”更改为“嵌入的资源”,可以使用ILDASM查看metadata来决定资源文件名及所在的文件夹,编译并更改一些错误;

当编译好后,找到所有与COM有关的内容将其注释掉(因为以前使用过CCW/RCW技术),并做相应的更改,每更改一个class后,编译一次,直到去掉其相关引用为止;

更改完成后,需要对其进行重构,主要重构以下方面:
Rename,因为Reflector工具反编译时其变量名会根据类型来命名,如text1,text2,num1等;
去掉goto语句,如果代码中有swtich语句时,Reflector工具会使用goto语句,严重影响程序逻辑其可读性;
Extract Method,将过于长的method执行分解操作;

当重构完成后,应用到项目中,并更改相应的Register语句,test,run,结果是successful,从而也在最短的时间内完成了项目经理所交给我的任务。


先行说明:在reflect时,请遵守ESRI公司的End User Licenses。


Reflector 应该是所有.Net 开发者必备的工具了, 这次重大的更新带来了很多方便和实用的特性:

1. C# 3.0/2.0 语言语法的完美反编译支持, 包括C# 3.0 的扩展方法, LINQ, Lambda, 以及C# 2.0的匿名方法等
2. "Code URL" 支持
3. 程序集浏览器的改进
4. 反编译浏览器的改进, 包括可以动态显示文档
5. 分析器的改进, 添加了“Exposed By”和“Instantiated By” 两种搜索
6. 搜索功能的改进, 包括字符串和常量搜索, 多关键字搜索
7. 资源查看器的改进
8. 更多的自定义选项和Windows Vista 的更好支持.

Reflector 下载地址:
http://www.aisto.com/roeder/dotnet/
Reflector 插件:
http://www.codeplex.com/reflectoraddins
Reflector 5.0 New Feature(PPT格式)
http://www.aisto.com/roeder/paper/reflector5.ppt