C#学习教程:Mono.Cecil可以修改已经加载在AppDomain中的代码吗?分享


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

我想在运行时向某个类添加一些行为。 我知道如何在运行时使用Reflection.Emit进行子类化,但这还不够,根据一些外部配置,我需要在类型T上的方法中注入操作码,以便从中inheritance的所有类自动获得此行为。(我无法使用.NET分析API)

可以用Mono.Cecil完成这样的事吗?

如果不能修改加载的程序集上的代码,那很好如果我可以在加载程序集之前进行修改然后将修改后的程序集加载到内存中,但我不知道如何控制程序集加载。

不,Cecil无法修改加载的程序集。 您必须在实际加载之前检测assembly。

您无法控制程序集的解析方式。 如果您将程序集隐藏在您的私人文件夹中,您可以挂钩到AppDomain.AssemblyResolve,然后在加载它们之前进行监视。

正如JB上面所说 – 你可以创建一个Resolve Event处理程序 – 就像PSeudoHooking一样。 在加载程序集之前,进行更改,然后在完成更改后,Resolve Assembly继续加载已更改的程序集。

我使用这种方法从Memory Streams中解析嵌入式Dll。

上述就是C#学习教程:Mono.Cecil可以修改已经加载在AppDomain中的代码吗?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1031890.html

发表评论

邮箱地址不会被公开。 必填项已用*标注