如何使用mono.cecil将自定义方法注入到.net程序集中,然后在入口点中调用它?我喜欢这样做是为了在构建二进制文件之后实现安全方法。
发布于 2016-11-29 16:05:25
要注入方法,您需要获取要添加的类型、方法,然后添加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。
发布于 2014-05-06 14:26:21
https://stackoverflow.com/questions/23461472
复制相似问题