首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Mono.Cecil的Inject方法

使用Mono.Cecil的Inject方法
EN

Stack Overflow用户
提问于 2014-05-05 04:56:53
回答 2查看 928关注 0票数 0

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

EN

回答 2

Stack Overflow用户

发布于 2016-11-29 16:05:25

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

代码语言:javascript
复制
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,并在入口点方法中添加指令以调用新的注入方法。

代码语言:javascript
复制
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。

票数 0
EN

Stack Overflow用户

发布于 2014-05-06 14:26:21

您可以使用Module.Import()函数。

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

信用到未知程序的导入程序类。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23461472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档