Пример #1
0
        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);
            }
        }
Пример #2
0
        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;
        }