一旦将.NET程序集加载到内存中,是否可以使用托管指针来更改它?

| 假设.NET元数据表格式包含实际的RVA,这些RVA显示了程序集在内存中的位置,是否有可能使用CLR上的托管指针来访问程序集在内存中的存储位置,以便可以修改后已加载到内存中?     
已邀请:
从技术上讲,是有可能的(假设FullTrust +不安全代码)-指针是指针,而经过JIT处理后,托管代码实际上是非托管代码。就是说,这似乎是试验之外的灾难的根源。您将无法修改IL,因为可能已经对其进行了JIT编辑,因此您必须去查找JIT编辑的代码,并希望CLR不会将其重新定位。从您的底下移出或重新编码(允许两者都执行)。 如果您确实想这样做,则有更简单的方法-一些元编程/模拟框架使用CLR Profiling API完成类似的技巧(在运行之前,之后运行,替换方法impl等)。即使我也不会投入生产,这是引发履历表制作事件的简便方法,因为这些挂钩实际上并未经过相同程度的稳定性测试(例如,它们泄漏,以奇怪的方式失效等) )。 :)     

要回复问题请先登录注册