Exemplo n.º 1
0
        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();
        }