使用.net 中的动态方法编程备忘录1(如何查看生成的动态方法的代码)
来源:互联网 发布:手机淘宝如何删除评论 编辑:程序博客网 时间:2024/06/06 01:10
使用动态方法编程,常常不知生成的动态方法是否正确,这里介绍,使用工具软件查看动态生成的代码的方法。
1、下载并安装可反编译.net程序的工具
我一直用Reflector.exe来反编译和查看exe、dll文件的代码,Reflector.exe 有免费版本,足够使用了。首先,要下载Reflector.exe,只要在搜索引擎搜一下,很容易得到这个软件的下载链接。
2、将发出的动态方法保存到.dll文件
正常情况下,动态方法或动态类、动态生成的程序集并不需要保存,而为了反编译和查看其代码,就必须将之保存为磁盘文件,
要保存动为磁盘文件,无论你原来程序中只是使用动态方法,还是使用动态类,即便本来没有动态生成的程序集,也必须通过动态程序集保存。
我的做法,是另建立一个专门测试的项目,有时也需要在原来程序中添加相应测试方法,使用 System.Reflection.Emit.AssemblyBuilder 及 ModuleBuilder、TypeBuilder 等,创建一个 TypeBuilder(如原程序本来有则无需创建,如无则需要创建),在TypeBuilder中,定义动态方法,并执行原程序中本来的 方法,最终,通过 AssemblyBuilder来保存。
示例:
运行程序,执行发出动态方法的代码,会保存为一个磁盘文件。
好像是,保存时,只能保存在测试程序的 exe所在目录,所以保存时,无需有前缀路径,只要有文件名即可。
一旦正确执行并保存后,即可直接在资源管理器中的右键菜单中,以Reflector.exe 打开此dll。
Reflector.exe打开后,会显示一个树状的程序集列表,点开你动态生成的程序集,向下逐步打开模块、类、类成员,双击类成员即可右侧窗格中显示该成员代码。
Reflector.exe中查看代码时,可选择查看 IL(微软中间语言)代码、C#代码、C++代码、VB代码等等。
IL代码是肯定可以看到的,而其他高级语言代码,有可能看不到,如果看不到,则有可能是Reflector.exe无法将之反编译成高级代码,这极有可能是你在发出动态代码时有错误,此时你可仔细查看 IL 代码,分析错误之处。
- 使用.net 中的动态方法编程备忘录1(如何查看生成的动态方法的代码)
- 使用.net 中的动态方法编程备忘录2(使用发出动态方法的意义)
- 在动态方法中如何尽量减少定义的 LocalBuilder 数量 (使用.net 中的动态方法编程备忘录8)
- 使用.net 中的动态方法编程备忘录3(DynamicMethod 的最优访问方式)
- 在动态方法中的比较运算 (使用.net 中的动态方法编程备忘录9)
- 使用.net 中的动态方法编程备忘录5(在动态方法中使用条件语句)
- 使用.net 中的动态方法编程备忘录6(OpCodes.Ldloc 与OpCodes.Ldloca)
- OpCodes.Call 与 OpCodes.Callvirt (使用.net 中的动态方法编程备忘录7)
- 使用.net 中的动态方法编程备忘录4(DynamicMethod 类的构造函数及访问其他类的私有成员)
- .net动态生成RSS文件的方法
- asp.net 动态生成导航的方法
- 动态生成JAVA代码的方法zz
- BCB动态生成(用代码生成)按钮的方法
- Java查看动态代理生成的代码
- 动态生成表格的方法
- 动态生成表格的方法
- HTML动态生成的方法
- 生成动态GIF的方法
- main与WinMain命令行参数提取
- C语言(rand函数)
- 智能算法学习笔记
- 用rand()和srand()产生伪随机数的方法总结
- 关于情感操控——人际交往尤其是男女关系中的软暴力
- 使用.net 中的动态方法编程备忘录1(如何查看生成的动态方法的代码)
- Head First Servlets&Jsp 读书摘记12——【模式和Struts】
- VIM Tips2
- 哈佛大学开放课程:《公正:该如何做是好?》5
- 窗口风格
- 老鹰的重生
- 结构性模式-代理模式
- Nautilus 无法处理“computer”位置
- 【转】【翻译】Orx官方教程:10.独立程序和本地化 stand alone & localization