码迷,mamicode.com
首页 > 其他好文 > 详细

使用cecil 完成 code injection

时间:2014-09-19 19:27:56      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   io   使用   ar   文件   2014   

 

1. 安装Mono.Cecil

 bubuko.com,布布扣

2. 创建一个测试项目:

bubuko.com,布布扣

 

添加测试方法:

 

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

 
 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. 运行查看结果

bubuko.com,布布扣

使用cecil 完成 code injection

标签:des   style   blog   http   io   使用   ar   文件   2014   

原文地址:http://blog.csdn.net/lan_liang/article/details/39401067

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!