private IntPtr CreateMethodStub(MethodCompiler methodCompiler) { if (methodCompiler == null) throw new ArgumentNullException("methodCompiler"); _unmanagedDelegates.Add(methodCompiler); IntPtr methodPtr = Marshal.GetFunctionPointerForDelegate(methodCompiler); Assembler assembler = new Assembler(); Label label = assembler.DefineLabel(); assembler.Call(label); assembler.MarkLabel(label); assembler.Sub(Mem.sysint_ptr(Register.nsp), 5); assembler.Call(methodPtr); assembler.Add(Register.nsp, IntPtr.Size); assembler.Jmp(Register.nax); return assembler.Make(); }