首页 > 代码库 > 使用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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。