当前位置: 首页 > 编程语言 > C#

Mono.Cecil可以修改AppDomain中已经加载的代码吗?分享

时间:2023-04-11 03:12:56 C#

Mono.Cecil可以修改已经加载到AppDomain中的代码吗?我想在运行时向某个类添加一些行为。我知道如何在运行时使用Reflection.Emit进行子类化,但这还不够,我需要根据一些外部配置在类型T的方法中注入操作码,以便从它继承的所有类都自动获得此行为。(我不能使用.NET分析API)可以用Mono.Cecil做这样的事情吗?如果无法修改加载程序集上的代码,我能在加载程序集之前进行修改,然后将修改后的程序集加载到内存中就好了,但是我不知道如何控制程序集加载。不,Cecil不能修改加载的程序集。您必须在实际加载程序集之前对其进行检测。您无法控制程序集的解析方式。如果您将程序集隐藏在您的私人文件夹中,您可以挂接到AppDomain.AssemblyResolve并在它们加载之前进行观察。正如JB上面所说-您可以创建一个解决事件处理程序-如PSeudoHooking。在加载程序集之前,先进行更改,然后在进行更改后,ResolveAssembly继续加载更改后的程序集。我使用这种方法从内存流中解析嵌入式Dll。以上是C#学习教程:Mono.Cecil能否修改AppDomain中已经加载的代码?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: