コード例 #1
0
            // Token: 0x06000028 RID: 40 RVA: 0x00003028 File Offset: 0x00003028
            private unsafe void hookEHInfo(IntPtr self, IntPtr ftn, uint EHnumber, A.CORINFO_EH_CLAUSE *clause)
            {
                bool flag = ftn == this.ftn;

                if (flag)
                {
                    *clause = this.clauses[(ulong)EHnumber * (ulong)((long)sizeof(A.CORINFO_EH_CLAUSE)) / (ulong)sizeof(A.CORINFO_EH_CLAUSE)];
                }
                else
                {
                    this.o_getEHinfo(self, ftn, EHnumber, clause);
                }
            }
コード例 #2
0
            // Token: 0x0600002A RID: 42 RVA: 0x000030A0 File Offset: 0x000030A0
            public unsafe static A.CorJitInfoHook Hook(A.ICorJitInfo *comp, IntPtr ftn, A.CORINFO_EH_CLAUSE *clauses)
            {
                IntPtr *vfptr = comp->vfptr;
                IntPtr *ptr   = (IntPtr *)((void *)Marshal.AllocHGlobal(158 * IntPtr.Size));

                for (int i = 0; i < 158; i++)
                {
                    ptr[i] = vfptr[i];
                }
                A.CorJitInfoHook corJitInfoHook = new A.CorJitInfoHook
                {
                    ftn      = ftn,
                    info     = comp,
                    clauses  = clauses,
                    newVfTbl = ptr,
                    oldVfTbl = vfptr
                };
                corJitInfoHook.n_getEHinfo = new A.getEHinfo(corJitInfoHook.hookEHInfo);
                corJitInfoHook.o_getEHinfo = (A.getEHinfo)Marshal.GetDelegateForFunctionPointer(vfptr[8], typeof(A.getEHinfo));
                ptr[8]      = Marshal.GetFunctionPointerForDelegate <A.getEHinfo>(corJitInfoHook.n_getEHinfo);
                comp->vfptr = ptr;
                return(corJitInfoHook);
            }
コード例 #3
0
            // Token: 0x06000025 RID: 37 RVA: 0x00002E60 File Offset: 0x00002E60
            public unsafe static A.CorMethodInfoHook Hook(A.ICorJitInfo *comp, IntPtr ftn, A.CORINFO_EH_CLAUSE *clauses)
            {
                A.ICorMethodInfo *ptr   = A.ICorStaticInfo.ICorMethodInfo(A.ICorDynamicInfo.ICorStaticInfo(A.ICorJitInfo.ICorDynamicInfo(comp)));
                IntPtr *          vfptr = ptr->vfptr;
                IntPtr *          ptr2  = (IntPtr *)((void *)Marshal.AllocHGlobal(27 * IntPtr.Size));

                for (int i = 0; i < 27; i++)
                {
                    ptr2[i * sizeof(IntPtr) / sizeof(IntPtr)] = vfptr[i * sizeof(IntPtr) / sizeof(IntPtr)];
                }
                bool flag = A.CorMethodInfoHook.ehNum == -1;

                if (flag)
                {
                    for (int j = 0; j < 27; j++)
                    {
                        bool  flag2 = true;
                        byte *ptr3  = (byte *)((void *)vfptr[j * sizeof(IntPtr) / sizeof(IntPtr)]);
                        while (*ptr3 != 233)
                        {
                            bool flag3 = (IntPtr.Size == 8) ? (*ptr3 == 72 && ptr3[1] == 129 && ptr3[2] == 233) : (*ptr3 == 131 && ptr3[1] == 233);
                            if (flag3)
                            {
                                flag2 = false;
                                break;
                            }
                            ptr3++;
                        }
                        bool flag4 = flag2;
                        if (flag4)
                        {
                            A.CorMethodInfoHook.ehNum = j;
                            break;
                        }
                    }
                }
                A.CorMethodInfoHook corMethodInfoHook = new A.CorMethodInfoHook
                {
                    ftn      = ftn,
                    info     = ptr,
                    clauses  = clauses,
                    newVfTbl = ptr2,
                    oldVfTbl = vfptr
                };
                corMethodInfoHook.n_getEHinfo = new A.getEHinfo(corMethodInfoHook.hookEHInfo);
                corMethodInfoHook.o_getEHinfo = (A.getEHinfo)Marshal.GetDelegateForFunctionPointer(vfptr[A.CorMethodInfoHook.ehNum * sizeof(IntPtr) / sizeof(IntPtr)], typeof(A.getEHinfo));
                ptr2[A.CorMethodInfoHook.ehNum * sizeof(IntPtr) / sizeof(IntPtr)] = Marshal.GetFunctionPointerForDelegate <A.getEHinfo>(corMethodInfoHook.n_getEHinfo);
                ptr->vfptr = ptr2;
                return(corMethodInfoHook);
            }