Mono.Cecil ReaderParameters
最近有需求 要写工具检查 代码方法中有没有存在一些类型或者委托 随便记录下
因为需要检查Method Body 普通反射已经无法满足,使用了Mono.Cecil这个库,感觉非常强大
Mono.Cecil
通过设置 ReaderParameters
ReadSymbols
可以读取pdb文件
常见的应用有
获取方法所在文件位置
var readerParameters = new ReaderParameters { ReadSymbols = true };//ReadSymbols 读取pdb
AssemblyDefinition assemblyDef = AssemblyDefinition.ReadAssembly(assembly.Location, readerParameters);static string GetSourceFilePath(TypeDefinition type){string path = null;foreach (var method in type.Methods){if (method.HasBody){//通过方法的断点信息 获取到文件位置var seqPointDict = method.DebugInformation.GetSequencePointMapping();foreach (var seqPair in seqPointDict){return seqPair.Value.Document.Url;}}}return path;}
AssemblyResolver
获取TypeReference的具体类型 TypeDefinition
因为在方法中查找类型的时候经常只能拿到TypeReference,想知道类型内部更多信息,比如方法、属性之类的,仅靠TypeReference是不够的
必须拿到TypeDefinition才可以,TypeReference.Resolve()是可以找到TypeDefinition,但是,如果这个类型是跨Assembly的,此时就需要对ReaderParameter进行设置
否则就取不到,抛出异常
添加上需要的所有Assembly所在文件夹的路径即可
var resolver = new DefaultAssemblyResolver();resolver.AddSearchDirectory("在此设置dll路径");var readerParameters = new ReaderParameters { ReadSymbols = true, AssemblyResolver = resolver };
Mono.Cecil ReaderParameters相关推荐
- 使用Mono.Cecil辅助ASP.NET MVC使用dynamic类型Model
使用Mono.Cecil辅助ASP.NET MVC使用dynamic类型Model 2011-09-06 00:21 by 老赵, 8645 visits 这也是之前在珠三角技术沙龙上的示例之一,解决 ...
- 利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习)
原文:利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习) Mono.Cecil是一个强大的MSIL的注入工具,利用它可以实现动态创建程序集,也可以实现拦截器横向切入动态方法,甚至还 ...
- 巧用Mono.Cecil反射加载类型和方法信息
最近在做服务的细粒度治理,统一管理所有服务的方法.参数.返回值信息.方便后续的各个模块之间的对接和协作. 目前系统中所有的服务,管理到接口契约粒度,即服务接口声明和服务接口实现.要做服务的细粒度治理: ...
- 编译时MSIL注入--实践Mono Cecil(1)
紧接上两篇浅谈.NET编译时注入(C#-->IL)和浅谈VS编译自定义编译任务-MSBuild Task(csproject),在第一篇中我们简单研究了c#语法糖和PostSharp的MSIl注 ...
- 运用Mono.Cecil 反射读取.NET程序集元数据
CLR自带的反射机智和API可以很轻松的读取.NET程序集信息,但是不能对程序集进行修改.CLR提供的是只读的API,但是开源项目Mono.Cecil不仅仅可以读取.NET程序集的元数据,还可以进行修 ...
- Mono.Cecil使用示例之使指定程序集成为UnityEditor.dll的友元程序集
Mono.Cecil使用示例之使指定程序集成为UnityEditor.dll的友元程序集 Mono.Cecil是一个开源的库,使用Mono.Cecil可以非常方便的在代码中修改C#程序集.在Unity ...
- Mono.Cecil C#代码注入
先标记下 有时间再写 转载于:https://www.cnblogs.com/docomo/archive/2013/06/06/3122157.html
- 基于mono.ceil对c#进行注入垃圾代码,混淆代码,IL代码注入
前言 unity的c#层,编译处理的程序集Assembly_CSharp.dll,通过dnspy反编译出来,可以看到自己写的代码,代码也是公司的财产(大雾,这不是我说的),但是开发项目过程中,有什么方 ...
- Mono 2.0正式发布了
Mono官网:http://mono-project.com/ 2.0 Release Notes: http://www.mono-project.com/Release_Notes_Mono_2. ...
- 几篇关于Cecil混淆程序集的文章
Paul Mason (via Chris Alcock)几篇关于保护源码和利用Cecil混淆演示的文章 Protecting your precious code!, Protecting your ...
最新文章
- Flutter开发之iOS真机调试(六)
- debian var目录
- hdu 5072 Coprime
- 天翼云从业认证课后习题(3.3天翼云网络产品)
- 【ARM】Tiny4412裸板编程之MMU(段 16M)
- JAVA安装作用_jdk安装配置及其作用
- php 字符串函数 教程_PHP 字符串获取 substr 与 strstr 函数
- 那些年,我们见过的 Java 服务端“问题”
- 杂七杂八DataTable获取Table某一列成List转换Table成List
- linux下 gdb+coredump 调试偶发crash的程序
- requests第三方库在测试中的使用
- BI—SSIS初步认识
- 【Proteus仿真】波形信号发生器(4种波形可选,频率可调)
- 修改input提示文字样式
- 正则去除html标签和空字符,正则表达式清除空格和html标签中的 空格
- 小马虎想用计算机计算396乘19,四年级上册数学精选练习题
- P5.JS绘制动态图形
- 【Docker之Swarm详细讲解Swarm集群搭建管理节点工作节点Raft一致性协议overlay网络Docker结合Swarm部署WordPress个人博客实战】
- 为什么要开发问卷调查APP?
- nginx日志格式配置
热门文章
- 贪玩蓝月角色服务器找不到了,贪玩蓝月合服角色处理方法曝光
- mapbox-gl:创建Marker
- 【WebIDE】 code-server 使用 vscode 原生插件市场地址
- 50内的勾股数java_学习知识:50以内勾股数有哪些
- BD-rate计算方法
- [转]音乐天堂 Music Heaven Vol.1 ~ Vol.36 的目录
- c# 金额小写转大写(财务金额)
- 国内就能读的中国人民大学与加拿大女王大学金融硕士,为职业发展的下一个阶段积蓄能量
- 使用Axis2创建一个Web Service的客户端 - 子非鱼,安知鱼之乐? - CSDNBlog
- openwrt-mt7628 wds配置