public static 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 static bool RevertDetour(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 + 2)) = backup.F32; } else { *((ulong *)(ptrOriginal + 2)) = backup.F64; } } return(true); } catch (Exception ex) { PointBlankLogging.LogError("Error reverting detour!", ex); return(false); } }
public DetourInfo(MethodInfo original, MethodInfo modified) { Modified = modified; Original = original; Offsets = new OffsetBackup(Original.MethodHandle.GetFunctionPointer()); }