是否可以在不使用不安全代码的情况下重写方法?
public static void ReplaceM(MethodBase src, MethodBase dest)
{
unsafe
{
IntPtr srcAdr = new IntPtr(((int*)src.MethodHandle.Value.ToPointer() + 12));
IntPtr destAdr = new IntPtr(((int*)dest.MethodHandle.Value.ToPointer() + 12));
if (IntPtr.Size == 8)
{
ulong* d = (ulong*)destAdr.ToPointer();
*d = *((ulong*)srcAdr.ToPointer());
}
else
{
uint* d = (uint*)destAdr.ToPointer();
*d = *((uint*)srcAdr.ToPointer());
}
}
}
可以通过元帅
System.Runtime.InterpropServices.Marshal重新定位 destAdr 是一堆不必要的转换,marshal 支持偏移,所以这样会更容易(即下面的代码将替换整个过程)
取对象的地址稍微复杂一点(可能会派上用场)
真相的后果可能是不可预测的,就像不安全一样。
PS替换方法体......也许你需要一个wiki委托(一个引用方法的变量)
在这里,我找到了另一个选择。