首页 > 代码库 > 使用cecil 完成 code injection

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


使用cecil 完成 code injection