// 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); } }
// 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); }
// 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); }