首页 > 其他 > 详细

使用cecil 完成 code injection

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

 

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!