/// <summary> /// Inject a delegate in VTable. /// </summary> /// <param name="pointerAddress">Pointer to address method.</param> /// <param name="delToInject">Delegate to be inject.</param> public void InjectHook(IntPtr pointerAddress, Delegate delToInject) { IntPtr originalAddress = Marshal.ReadIntPtr(pointerAddress); IntPtr hookAddress = Marshal.GetFunctionPointerForDelegate(delToInject); VTableHook hook = new VTableHook(delToInject, originalAddress, pointerAddress); WritePointer(pointerAddress, hookAddress); _hooks.Add(hook); }
private bool RemoveHook(VTableHook hook) { WritePointer(hook.Address, hook.OriginalAddress); _hooks.Remove(hook); return(true); }