当前位置: 首页 > news >正文

使用cecil 完成 code injection

 

1. 安装Mono.Cecil

 

2. 创建一个测试项目:

 

添加测试方法:

 

这个方法的返回值会被动态重写.

 
 public class Class1
    {
       public static string Test()
       {
           return "ok";
       }
    }


 

 

3. code Injection 代码:

 

var path = @"\XX\bin\Debug\ClassLibrary1.dll";
 
           var assembly = AssemblyDefinition.ReadAssembly
                (path);
           var type =assembly.MainModule.GetType("ClassLibrary1.Class1");
           var foundMethod = type.GetMethods().First(m => m.Name =="Test");
清空当前方法指令
           foundMethod.Body.Instructions.Clear();
获得当前IL的指令执行器
           var worker = foundMethod.Body.GetILProcessor();
修改返回值
           Instruction ins1 = worker.Create(OpCodes.Ldstr, "will be changed onnext time run");
           Instruction ins2 = worker.Create(OpCodes.Ret);
 
           worker.Append(ins1);
           worker.Append(ins2);
保存DLL文件
           assembly.Write(path);
 
下次调用就会看到(因为新保存的DLL下次才能加载到)
           Console.WriteLine(Class1.Test());
           Console.Read();

4. 运行查看结果


相关文章:

  • 善用属性
  • SQLServer任意列之间的聚合
  • [编程技巧] 巧用CPU缓存优化代码:数组 vs. 链表
  • 保存Bitmap到内存流中引发“GDI+中发生一般性错误”
  • Asp.net Mvc使用PagedList分页
  • [Web开发] PSD 转换成HTML/CSS 的工具网站
  • 算法练习--整数拆分为素数乘积
  • 算法练习--卡片游戏
  • [IE编程] 了解Urlmon.dll和Wininet.dll
  • 算法练习--小球下落
  • 在LINQ to SQL中处理“更新已被其它用户删除对象”的错误
  • 算法练习--打印Cantor 数表
  • 企业中的4种人才
  • Sun的启示------技术在企业发展中的分量
  • Computer Science 学习第四章--CPU 指令集及指令处理
  • 【node学习】协程
  • 30秒的PHP代码片段(1)数组 - Array
  • Cumulo 的 ClojureScript 模块已经成型
  • eclipse(luna)创建web工程
  • HTTP那些事
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • js操作时间(持续更新)
  • Linux后台研发超实用命令总结
  • PaddlePaddle-GitHub的正确打开姿势
  • PHP的类修饰符与访问修饰符
  • python_bomb----数据类型总结
  • Terraform入门 - 1. 安装Terraform
  • 对象管理器(defineProperty)学习笔记
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 记一次用 NodeJs 实现模拟登录的思路
  • 前端面试总结(at, md)
  • 如何进阶一名有竞争力的程序员?
  • 我的面试准备过程--容器(更新中)
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 交换综合实验一
  • ​如何在iOS手机上查看应用日志
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转载)从 Java 代码到 Java 堆
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .bat批处理(六):替换字符串中匹配的子串
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET CORE Aws S3 使用
  • .net framework profiles /.net framework 配置
  • .Net IOC框架入门之一 Unity
  • @软考考生,这份软考高分攻略你须知道
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • []FET-430SIM508 研究日志 11.3.31
  • [AIGC] Redis基础命令集详细介绍
  • [BZOJ1040][P2607][ZJOI2008]骑士[树形DP+基环树]