用Mono.Cecil注入方法

时间:2014-05-04 20:56:53

标签: vb.net methods inject mono.cecil

如何使用mono.cecil将自定义方法注入到.net程序集中,然后在入口点中调用它? 在构建二进制文件之后,我喜欢这样做以实现安全方法。

2 个答案:

答案 0 :(得分:0)

要注入方法,您需要获取要添加方法的类型,然后添加MethoDefinition

var mainModule = ModuleDefinition.ReadModule(assemblyPath);
var type = module.Types.Single(t => t.Name == "TypeYouWant");
var newMethodDef= new MethodDefinition("Name", MethodAttributes.Public, mainModule.TypeSystem.Void);
type.Methods.Add(newMethodDef);

要从入口点调用此方法,您需要获取入口点MethodDefinition和新注入的MethodReference并在入口点方法中添加指令以调用新的注入方法。

var newMethodRef = type.Methods.Single(m => m.Name == "Name").Resolve();
var entryPoint= type.Methods.Single(m => m.Name == "YourEntryPoint");
var firstInstruction = entryPoint.Body.Instructions.First();
var il = entryPoint.Body.GetILProcessor();
il.InsertBefore(firstInstruction, Instruction.Create(OpCodes.Callvirt, newMethodRef));
mainModule.Write(assemblyPath);

注意:是的我知道它的C#而不是VB,但我确信一旦你明白你就可以轻松地将它转换为VB。

答案 1 :(得分:-1)

您可以使用Module.Import()功能。

示例类可以在视频中看到: https://www.youtube.com/watch?v=heTCisgYjhs

致TheUnknownProgrammer的导入者类的信用。