bool CheckType(MethodDef initMethod) { if (!initMethod.HasBody) { return(false); } if (DotNetUtils.FindFieldType(initMethod.DeclaringType, "System.Reflection.Assembly", true) == null) { return(false); } resolverVersion = CheckSetupMethod(initMethod); if (resolverVersion == ResolverVersion.None) { resolverVersion = CheckSetupMethod(initMethod.DeclaringType.FindStaticConstructor()); } if (resolverVersion == ResolverVersion.None) { return(false); } resolverType = initMethod.DeclaringType; resolverMethod = initMethod; return(true); }
bool checkType(MethodDefinition initMethod) { if (!initMethod.HasBody) { return(false); } if (DotNetUtils.findFieldType(initMethod.DeclaringType, "System.Reflection.Assembly", true) == null) { return(false); } resolverVersion = checkSetupMethod(initMethod); if (resolverVersion == ResolverVersion.None) { resolverVersion = checkSetupMethod(DotNetUtils.getMethod(initMethod.DeclaringType, ".cctor")); } if (resolverVersion == ResolverVersion.None) { return(false); } resolverType = initMethod.DeclaringType; resolverMethod = initMethod; return(true); }
bool checkType(TypeDefinition type, MethodDefinition initMethod) { if (!initMethod.HasBody) return false; if (DotNetUtils.findFieldType(type, "System.Reflection.Assembly", true) == null) return false; var instructions = initMethod.Body.Instructions; int foundCount = 0; for (int i = 0; i < instructions.Count; i++) { var instrs = DotNetUtils.getInstructions(instructions, i, OpCodes.Ldnull, OpCodes.Ldftn, OpCodes.Newobj); if (instrs == null) continue; MethodReference methodRef; var ldftn = instrs[1]; var newobj = instrs[2]; methodRef = ldftn.Operand as MethodReference; if (methodRef == null || !MemberReferenceHelper.compareTypes(type, methodRef.DeclaringType)) continue; methodRef = newobj.Operand as MethodReference; if (methodRef == null || methodRef.FullName != "System.Void System.ResolveEventHandler::.ctor(System.Object,System.IntPtr)") continue; foundCount++; } if (foundCount == 0) return false; switch (foundCount) { case 1: resolverVersion = ResolverVersion.V1; break; case 2: resolverVersion = ResolverVersion.V2; break; default: return false; } resolverType = type; resolverMethod = initMethod; return true; }
bool checkType(MethodDef initMethod) { if (!initMethod.HasBody) return false; if (DotNetUtils.findFieldType(initMethod.DeclaringType, "System.Reflection.Assembly", true) == null) return false; resolverVersion = checkSetupMethod(initMethod); if (resolverVersion == ResolverVersion.None) resolverVersion = checkSetupMethod(initMethod.DeclaringType.FindStaticConstructor()); if (resolverVersion == ResolverVersion.None) return false; resolverType = initMethod.DeclaringType; resolverMethod = initMethod; return true; }