コード例 #1
0
        public static IntPtr CreateTrampoline(Module module, ulong codeAdr, uint key, DarksVMFuncSig sig, uint sigId)
        {
            var dm = trampolines[codeAdr];

            if (dm != null)
            {
                return(getDesc((DynamicMethod)dm).GetFunctionPointer());
            }

            lock (trampolines)
            {
                dm = (DynamicMethod)trampolines[codeAdr];
                if (dm != null)
                {
                    return(getDesc((DynamicMethod)dm).GetFunctionPointer());
                }

                if (ShouldBeTyped(sig))
                {
                    dm = CreateTrampolineTyped(DarksVMInstance.GetModuleId(module), codeAdr, key, sig, sigId);
                }
                else
                {
                    dm = CreateTrampolineNormal(DarksVMInstance.GetModuleId(module), codeAdr, key, sig, sigId);
                }
                trampolines[codeAdr] = dm;
                return(getDesc((DynamicMethod)dm).GetFunctionPointer());
            }
        }
コード例 #2
0
 public DarksVMContext(DarksVMInstance inst)
 {
     this.Instance = inst;
 }