使用cecil 完成 code injection

来源:互联网 发布:不可抗力网络电影 编辑:程序博客网 时间:2024/06/16 02:13

 

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


0 0
原创粉丝点击