public static Boolean Is_Ldelem(this VirtualOpCode ins) { return(ins.MatchesEntire(new Code[] { Code.Ldarg_1, Code.Castclass, Code.Callvirt, Code.Stloc_0, Code.Ldarg_0, Code.Ldloc_0, Code.Call, Code.Stloc_1, Code.Ldarg_0, Code.Ldloc_1, Code.Call, Code.Ret }) && _Is_Ldelem(ins)); }
public static Boolean Is_Throw(this VirtualOpCode ins) { return(ins.MatchesEntire(new Code[] { Code.Ldarg_0, Code.Call, Code.Stloc_0, Code.Ldloc_0, Code.Callvirt, Code.Call, Code.Ret }) && _Is_Throw(ins, ((MethodDef)ins.DelegateMethod.Body.Instructions[5].Operand))); }
public static Boolean Is_Ldelem_Ref(this VirtualOpCode ins) { // Is exact same as Ldelem_I except for the field reference return(ins.MatchesEntire(new Code[] { Code.Ldarg_0, Code.Ldsfld, Code.Call, Code.Ret }) && _Is_Ldelem(ins) && !ins.Is_Ldelem_I()); }
public static Boolean Is_Ret(this VirtualOpCode ins) { return(ins.MatchesEntire(new Code[] { Code.Ldarg_0, Code.Call, Code.Ret }) && ((MethodDef)ins.DelegateMethod.Body.Instructions[1].Operand).MatchesEntire(new Code[] { Code.Ldarg_0, Code.Ldc_I4_1, Code.Stfld, Code.Ret })); }
private static Boolean _Is_Ldelem_T(VirtualOpCode ins, String typeName) { return(ins.MatchesEntire(new Code[] { Code.Ldarg_0, Code.Ldtoken, Code.Call, Code.Call, Code.Ret }) && ((ITypeDefOrRef)ins.DelegateMethod.Body.Instructions[1].Operand) .FullName.Equals(typeName) && _Is_Ldelem(ins)); }
private static Boolean Is_Stloc_C(VirtualOpCode ins, Code code) { return(ins.MatchesEntire(ins.ModifyPattern(Pattern_Stloc_C, Code.Ldc_I4, code)) && Helpers.FindOpCodePatterns( // Check called method against Pattern_Helper_Stloc_C ((MethodDef)ins.DelegateMethod.Body.Instructions[2].Operand).Body.Instructions, Pattern_Helper_Stloc_C ).Count > 0); }
public static Boolean _Is_Ldc(VirtualOpCode ins, OperandType expectedOperandType) { OperandType operandType; return(ins.MatchesEntire(Pattern_Ldc) && ins.TryGetOperandType(out operandType) && operandType == expectedOperandType); }
private static Boolean _Is_Ldelem_T(VirtualOpCode ins, String typeName) { return ins.MatchesEntire(new Code[] { Code.Ldarg_0, Code.Ldtoken, Code.Call, Code.Call, Code.Ret }) && ((ITypeDefOrRef)ins.DelegateMethod.Body.Instructions[1].Operand) .FullName.Equals(typeName) && _Is_Ldelem(ins); }
public static Boolean Is_Ldloc_S(this VirtualOpCode ins) { return(ins.MatchesEntire(Pattern_Ldloc) && ((MethodDef)ins.DelegateMethod.Body.Instructions[7].Operand) .ReturnType.FullName.Equals("System.Byte") && ((FieldDef)ins.DelegateMethod.Body.Instructions[5].Operand) .MDToken == ins.VType.LocalsField.MDToken); }
public static Boolean Is_Ldlen(this VirtualOpCode ins) { return(ins.MatchesEntire(new Code[] { Code.Ldarg_0, Code.Call, Code.Callvirt, Code.Castclass, Code.Stloc_0, Code.Ldarg_0, Code.Newobj, Code.Stloc_1, Code.Ldloc_1, Code.Ldloc_0, Code.Callvirt, Code.Callvirt, Code.Ldloc_1, Code.Call, Code.Ret }) && ((IMethod)ins.DelegateMethod.Body.Instructions[10].Operand) .FullName.Contains("System.Array::get_Length")); }
public static Boolean Is_Ldstr(this VirtualOpCode ins) { return(ins.MatchesEntire(new Code[] { Code.Ldarg_1, Code.Castclass, Code.Callvirt, Code.Stloc_0, Code.Ldarg_0, Code.Ldloc_0, Code.Call, Code.Stloc_1, Code.Ldarg_0, Code.Newobj, Code.Stloc_2, Code.Ldloc_2, Code.Ldloc_1, Code.Callvirt, Code.Ldloc_2, Code.Call, Code.Ret }) && ((MethodDef)ins.DelegateMethod.Body.Instructions[6].Operand) .ReturnType.FullName.Equals("System.String")); }
private static Boolean _Is_Stloc(VirtualOpCode ins, String indexTypeName) { return(ins.MatchesEntire(Pattern_Stloc) && ((MethodDef)ins.DelegateMethod.Body.Instructions[5].Operand) .ReturnType.FullName.Equals(indexTypeName) && Helpers.FindOpCodePatterns( // Check called method against Pattern_Helper_Stloc_C ((MethodDef)ins.DelegateMethod.Body.Instructions[6].Operand).Body.Instructions, Pattern_Helper_Stloc_C ).Count > 0); }
public static Boolean Is_Br(this VirtualOpCode ins) { MethodDef called; return(ins.MatchesEntire(new Code[] { Code.Ldarg_1, Code.Castclass, Code.Callvirt, Code.Stloc_0, Code.Ldarg_0, Code.Ldloc_0, Code.Call, Code.Ret }) && (called = (MethodDef)ins.DelegateMethod.Calls().ToArray()[1]).MatchesEntire(new Code[] { Code.Ldarg_0, Code.Ldarg_1, Code.Newobj, Code.Stfld, Code.Ret }) && ((IMethod)called.Body.Instructions[2].Operand).FullName.Contains("System.Nullable")); }
public static Boolean Is_Pop(this VirtualOpCode ins) { MethodDef method = null; return(ins.MatchesEntire(new Code[] { Code.Ldarg_0, Code.Call, Code.Pop, Code.Ret }) && (method = ins.DelegateMethod.Body.Instructions[1].Operand as MethodDef) != null && method.MatchesEntire(new Code[] { Code.Ldarg_0, Code.Ldfld, Code.Callvirt, Code.Ret })); }
public static Boolean Is_Conv_Ovf_I4(this VirtualOpCode ins) { return(ins.MatchesEntire(new Code[] { Code.Ldarg_0, Code.Ldc_I4_1, Code.Call, Code.Ret }) && ins.DelegateMethod.MatchesIndirect(Pattern_Conv_I4)); }
private static Boolean Is_Ldloc_C(VirtualOpCode ins, Code code) { return(ins.MatchesEntire(ins.ModifyPattern(Pattern_Ldloc_C, Code.Ldc_I4, code)) && ((FieldDef)ins.DelegateMethod.Body.Instructions[2].Operand).MDToken == ins.VType.LocalsField.MDToken); }
private static Boolean Is_Stloc_C(VirtualOpCode ins, Code code) { return ins.MatchesEntire(ins.ModifyPattern(Pattern_Stloc_C, Code.Ldc_I4, code)) && Helpers.FindOpCodePatterns( // Check called method against Pattern_Helper_Stloc_C ((MethodDef)ins.DelegateMethod.Body.Instructions[2].Operand).Body.Instructions, Pattern_Helper_Stloc_C ).Count > 0; }
private static Boolean _Is_Stloc(VirtualOpCode ins, String indexTypeName) { return ins.MatchesEntire(Pattern_Stloc) && ((MethodDef)ins.DelegateMethod.Body.Instructions[5].Operand) .ReturnType.FullName.Equals(indexTypeName) && Helpers.FindOpCodePatterns( // Check called method against Pattern_Helper_Stloc_C ((MethodDef)ins.DelegateMethod.Body.Instructions[6].Operand).Body.Instructions, Pattern_Helper_Stloc_C ).Count > 0; }
private static Boolean Is_Ldloc_C(VirtualOpCode ins, Code code) { return ins.MatchesEntire(ins.ModifyPattern(Pattern_Ldloc_C, Code.Ldc_I4, code)) && ((FieldDef)ins.DelegateMethod.Body.Instructions[2].Operand).MDToken == ins.VType.LocalsField.MDToken; }
private static Boolean Is_Ldc_I4_C(VirtualOpCode ins, Code code) { return ins.MatchesEntire(ins.ModifyPattern(Pattern_Ldc_I4_C, Code.Ldc_I4, code)); }
public static Boolean Is_Ldnull(this VirtualOpCode ins) { return(ins.MatchesEntire(new Code[] { Code.Ldarg_0, Code.Newobj, Code.Call, Code.Ret })); }
private static Boolean Is_Ldc_I4_C(VirtualOpCode ins, Code code) { return(ins.MatchesEntire(ins.ModifyPattern(Pattern_Ldc_I4_C, Code.Ldc_I4, code))); }
public static Boolean _Is_Ldc(VirtualOpCode ins, OperandType expectedOperandType) { OperandType operandType; return ins.MatchesEntire(Pattern_Ldc) && ins.TryGetOperandType(out operandType) && operandType == expectedOperandType; }