Example #1
0
 public static Boolean Is_Newobj(this VirtualOpCode ins)
 {
     return(ins.Matches(new Code[] {
         Code.Ldarg_0, Code.Ldloc_2, Code.Ldnull, Code.Ldloc_3, Code.Ldc_I4_0,
         Code.Call, Code.Stloc_S, Code.Leave_S
     }));
 }
Example #2
0
 private static Boolean Is_Ldarg_C(VirtualOpCode ins, Code code)
 {
     // Ldarg_C delegates will reference the arguments field in their Ldfld, which sets them apart from
     // other very similar delegates
     return(ins.Matches(ins.ModifyPattern(Pattern_Ldarg_C, Code.Ldc_I4, code)) &&
            ((FieldDef)ins.DelegateMethod.Body.Instructions[2].Operand).MDToken == ins.VType.ArgumentsField.MDToken);
 }
Example #3
0
 public static Boolean Is_Box(this VirtualOpCode ins)
 {
     return(ins.Matches(new Code[] {
         Code.Ldarg_1, Code.Castclass, Code.Callvirt, Code.Stloc_2, Code.Ldarg_0,
         Code.Ldloc_2, Code.Call, Code.Stloc_0, Code.Ldarg_0, Code.Call
     }));
 }
Example #4
0
		private static Boolean Is_Ldarg_C(VirtualOpCode ins, Code code)
		{
			// Ldarg_C delegates will reference the arguments field in their Ldfld, which sets them apart from
			// other very similar delegates
			return ins.Matches(ins.ModifyPattern(Pattern_Ldarg_C, Code.Ldc_I4, code))
				&& ((FieldDef)ins.DelegateMethod.Body.Instructions[2].Operand).MDToken == ins.VType.ArgumentsField.MDToken;
		}
Example #5
0
        public static Boolean Is_Starg_S(this VirtualOpCode ins)
        {
            var sub = ins.Find(Pattern_Starg);

            return(sub != null && sub[3].Operand is MethodDef &&
                   ((MethodDef)sub[3].Operand).ReturnType.FullName.Equals("System.Byte") &&
                   ins.Matches(Pattern_Tail_Starg));
        }
Example #6
0
 public static Boolean Is_Bge(this VirtualOpCode ins)
 {
     return(ins.Matches(new Code[] {
         Code.Call, Code.Brtrue_S, Code.Ldarg_1, Code.Castclass
     }) && ins.MatchesIndirect(new Code[] {
         Code.Ldarg_0, Code.Castclass, Code.Callvirt, Code.Ldarg_1, Code.Castclass,
         Code.Callvirt, Code.Clt, Code.Stloc_0, Code.Ldloc_0, Code.Ret
     }));
 }
Example #7
0
 public static Boolean Is_Bgt_Un(this VirtualOpCode ins)
 {
     return(ins.Matches(new Code[] {
         Code.Call, Code.Brfalse_S, Code.Ldarg_1, Code.Castclass
     }) && ins.MatchesIndirect(new Code[] {
         Code.Ldloc_2, Code.Ldloc_3, Code.Bgt_S, Code.Ldloc_2, Code.Call, Code.Brtrue_S,
         Code.Ldloc_3, Code.Call, Code.Br_S
     }));
 }
Example #8
0
 public static Boolean Is_Stsfld(this VirtualOpCode ins)
 {
     return(ins.Matches(new Code[] {
         Code.Ldloc_1, Code.Ldnull, Code.Ldloc_3, Code.Callvirt, Code.Callvirt,
         Code.Ret
     }) && ins.DelegateMethod.Calls().Any((called) =>
     {
         return called.FullName.Contains("System.Reflection.FieldInfo::SetValue");
     }));
 }
Example #9
0
 public static Boolean Is_Brtrue(this VirtualOpCode ins)
 {
     return(ins.Matches(new Code[] {
         Code.Ldloc_0, Code.Callvirt, Code.Ldnull, Code.Cgt_Un, Code.Stloc_1             //should work for both cleaned and uncleaned
     }));
     //var sub = ins.DelegateMethod.Find(new Code[] {
     //	Code.Ldloc_0, Code.Castclass, Code.Callvirt, Code.Ldsfld, Code.Call,
     //	Code.Stloc_1, Code.Br_S
     //});
     //return sub != null
     //	&& ((IMethod)sub[4].Operand).FullName.Contains("System.UIntPtr::op_Inequality");
 }
Example #10
0
 public static Boolean Is_Ldelema(this VirtualOpCode ins)
 {
     // Note: Another way to detect may be by looking at Newobj TypeDef, as
     // it seems specific to the Ldelema instruction type
     // (has 3 fields: Array, long, Type)
     return(ins.Matches(new Code[] {
         Code.Ldarg_0, Code.Newobj, Code.Stloc_0,
         Code.Ldloc_0, Code.Ldloc_S, Code.Callvirt,
         Code.Ldloc_0, Code.Ldloc_2, Code.Callvirt,
         Code.Ldloc_0, Code.Ldloc_3, Code.Callvirt,
         Code.Ldloc_0, Code.Call, Code.Ret
     }));
 }
Example #11
0
 public static Boolean Is_Brfalse(this VirtualOpCode ins)
 {
     return(ins.Matches(new Code[] {
         Code.Ldloc_0, Code.Callvirt, Code.Ldnull, Code.Ceq, Code.Stloc_1                    //should work for both cleaned and uncleaned
     }));
 }
Example #12
0
 public static Boolean Is_Bge_Un(this VirtualOpCode ins)
 {
     return(ins.Matches(new Code[] {
         Code.Call, Code.Brtrue_S, Code.Ldarg_1, Code.Castclass
     }) && ins.MatchesIndirect(Pattern_Clt_Un));
 }
Example #13
0
 public static Boolean Is_Ble(this VirtualOpCode ins)
 {
     return(ins.Matches(new Code[] {
         Code.Call, Code.Ldc_I4_0, Code.Ceq, Code.Stloc_2
     }) && ins.MatchesIndirect(Pattern_Ble_Un));
 }
Example #14
0
 public static Boolean Is_Bgt(this VirtualOpCode ins)
 {
     return(ins.Matches(Pattern_Br_True) && ins.MatchesIndirect(Pattern_GreaterThan));
 }
Example #15
0
 public static Boolean Is_Bne_Un(this VirtualOpCode ins)
 {
     return(ins.Matches(Pattern_Br_False) && _Is_Br_Equality(ins) && _Jumps(ins));
 }
Example #16
0
 public static Boolean Is_Brfalse(this VirtualOpCode ins)
 {
     return(ins.Matches(new Code[] {
         Code.Ldloc_0, Code.Callvirt, Code.Ldnull, Code.Ceq, Code.Stloc_1, Code.Br_S
     }));
 }