Skip to content

Instantly share code, notes, and snippets.

@mattwarren
Forked from vcsjones/evil.cs
Last active August 29, 2015 14:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mattwarren/e56b3bfb98989535903a to your computer and use it in GitHub Desktop.
Save mattwarren/e56b3bfb98989535903a to your computer and use it in GitHub Desktop.
private static void ChangeToReturnFalse(MethodInfo methodInfo)
{
var intPtrConstructor = typeof(IntPtr).GetConstructor(new[] { typeof(void*) });
var method = new DynamicMethod("ChangeToReturnFalse", typeof(IntPtr), Type.EmptyTypes, typeof(ServiceLocationModule));
var generator = method.GetILGenerator();
generator.Emit(OpCodes.Ldftn, methodInfo);
generator.Emit(OpCodes.Newobj, intPtrConstructor);
generator.Emit(OpCodes.Ret);
var addressFunctor = (Func<IntPtr>)method.CreateDelegate(typeof(Func<IntPtr>));
var address = addressFunctor();
var x64Asm = new byte[]
{
0x33, 0xc0, 0xf3, 0xc3
};
var x86Asm = new byte[]
{
0x55, 0x8b, 0xec, 0x33, 0xc0, 0x5d, 0xc3
};
var asm = IntPtr.Size == 8 ? x64Asm : x86Asm;
Marshal.Copy(asm, 0, address, asm.Length);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment