public static unsafe bool RevertOverride(OverrideUtilities.OffsetBackup backup) { bool result; try { byte *ptr = (byte *)backup.Method.ToPointer(); * ptr = backup.A; ptr[1] = backup.B; ptr[10] = backup.C; ptr[11] = backup.D; ptr[12] = backup.E; bool flag = IntPtr.Size == 4; if (flag) { *(int *)(ptr + 1) = (int)backup.F32; ptr[5] = backup.G; } else { *(long *)(ptr + 2) = (long)backup.F64; } result = true; } catch (Exception) { result = false; } return(result); }
public OverrideWrapper(MethodInfo original, MethodInfo modified, OverrideAttribute attribute, object instance = null) { Original = original; Modified = modified; Instance = instance; Attribute = attribute; Local = (Modified.DeclaringType.Assembly == Assembly.GetExecutingAssembly()); RuntimeHelpers.PrepareMethod(original.MethodHandle); RuntimeHelpers.PrepareMethod(modified.MethodHandle); PtrOriginal = Original.MethodHandle.GetFunctionPointer(); PtrModified = Modified.MethodHandle.GetFunctionPointer(); OffsetBackup = new OverrideUtilities.OffsetBackup(PtrOriginal); Detoured = false; }