public bool RevertOverride(OffsetBackup backup) { try { unsafe { byte *ptrOriginal = (byte *)backup.Method.ToPointer(); *ptrOriginal = backup.A; *(ptrOriginal + 1) = backup.B; *(ptrOriginal + 10) = backup.C; *(ptrOriginal + 11) = backup.D; *(ptrOriginal + 12) = backup.E; if (IntPtr.Size == sizeof(Int32)) { *((uint *)(ptrOriginal + 1)) = backup.F32; *(ptrOriginal + 5) = backup.G; } else { *((ulong *)(ptrOriginal + 2)) = backup.F64; } } return(true); } catch (Exception) { return(false); } }
public OverrideWrapper(MethodInfo original, MethodInfo modified, object instance = null) { // Set the variables Original = original; Modified = modified; Instance = instance; if (Modified.DeclaringType != null) { Local = Modified.DeclaringType.Assembly == Assembly.GetExecutingAssembly(); } RuntimeHelpers.PrepareMethod(original.MethodHandle); RuntimeHelpers.PrepareMethod(modified.MethodHandle); PtrOriginal = Original.MethodHandle.GetFunctionPointer(); PtrModified = Modified.MethodHandle.GetFunctionPointer(); OffsetBackup = new OffsetBackup(PtrOriginal); Detoured = false; }