public bool WriteProtected <T>(IntPtr ptr, T value) where T : struct
 {
     using (var memoryOperation = new MemoryProtectionOperation(ptr, Marshal.SizeOf <T>())) {
         if (memoryOperation.Apply())
         {
             return(Write(ptr, value));
         }
     } return(false);
 }
Exemple #2
0
        public Detour(Delegate originalFunction, Delegate detourFunction, InProcessMemoryEditor memoryEditor = null)
        {
            OriginalFunction    = originalFunction;
            OriginalFunctionPtr = Marshal.GetFunctionPointerForDelegate(OriginalFunction);

            DetourFunction    = detourFunction;
            DetourFunctionPtr = Marshal.GetFunctionPointerForDelegate(DetourFunction);

            DetourInstructions = new List <byte>()
            {
                (byte)OpCodes.Push, (byte)OpCodes.Retn
            };
            DetourInstructions.InsertRange(1, BitConverter.GetBytes(DetourFunctionPtr.ToInt32()));

            MemoryEditor    = memoryEditor ?? new InProcessMemoryEditor();
            MemoryOperation = new MemoryProtectionOperation(OriginalFunctionPtr, instructionLength);
        }