我有这个方法:
public int Test()
{
ExternalClass cls = new ExternalClass();
return cls.ExternalMethod();
}
我需要使用 IL Injection 对其进行更改,以便可以将类型作为参数传递并删除直接对象创建,如下所示:
public int Test(ExternalClass cls)
{
return cls.ExternalMethod();
}
我可以使用 <>.Parameters.Add( _ ___ ) 添加额外的参数并生成新的程序集。
问题是我无法删除创建新对象的指令。下面是我用来删除它的行。
ILProcessor ilProcessor = <<MethodDefinition>>.Body.GetILProcessor();
ilProcessor.Remove(<<newobj instruction>>);
一旦我尝试调用修改后的汇编方法,如下所示,它会抛出错误“公共语言运行时检测到无效程序”。
ExternalClass ext = new ExternalClass();
int i = prg1.Test(ext);
我知道我可能也需要处理与内存分配相关的事情。如果有人能够提供要在此处实施的其他步骤,我将不胜感激。