Beispiel #1
0
        private AnalysisNet.IInstruction ProcessStoreField(Cecil.Cil.Instruction op)
        {
            Cecil.FieldReference             cciField = op.Operand as Cecil.FieldReference;//op.Operand as Cci.IFieldReference;
            AnalysisNet.Types.FieldReference ourField = typeExtractor.ExtractField(cciField, op.OpCode.Code == Cecil.Cil.Code.Stsfld);

            AnalysisNetBytecode.StoreFieldInstruction instruction = new AnalysisNetBytecode.StoreFieldInstruction((uint)op.Offset, ourField);
            return(instruction);
        }
Beispiel #2
0
        private AnalysisNet.IInstruction ProcessLoadField(Cecil.Cil.Instruction op)
        {
            AnalysisNetBytecode.LoadFieldOperation operation = OperationHelper.ToLoadFieldOperation(op.OpCode.Code);
            Cecil.FieldReference cciField = op.Operand as Cecil.FieldReference;
            bool isStatic = op.OpCode.Code == Cecil.Cil.OpCodes.Ldsfld.Code || op.OpCode.Code == Cecil.Cil.OpCodes.Ldsflda.Code;

            AnalysisNet.Types.FieldReference ourField = typeExtractor.ExtractField(cciField, isStatic);

            AnalysisNetBytecode.LoadFieldInstruction instruction = new AnalysisNetBytecode.LoadFieldInstruction((uint)op.Offset, operation, ourField);
            return(instruction);
        }
Beispiel #3
0
 public AnalysisNet.Types.FieldReference ExtractField(Cecil.FieldReference field, bool isStatic)
 {
     (Cecil.FieldReference, bool)key = ValueTuple.Create(field, isStatic);
     return(performanceCache.GetOrCreate(key, (cacheEntry) =>
     {
         AnalysisNet.Types.FieldReference analysisNetField = new AnalysisNet.Types.FieldReference(field.Name, ExtractType(field.FieldType))
         {
             ContainingType = (AnalysisNet.Types.IBasicType)ExtractType(field.DeclaringType),
             IsStatic = isStatic
         };
         return analysisNetField;
     }));
 }