如何使用mono.cecil将自定义方法注入到.net程序集中,然后在入口点中调用它? 在构建二进制文件之后,我喜欢这样做以实现安全方法。
答案 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的导入者类的信用。