Esempio n. 1
0
        private Cecil.FieldDefinition CreateFieldDefinition(AnalysisNet.Types.FieldDefinition fieldDefinition)
        {
            Cecil.FieldAttributes fieldAttribute = Cecil.FieldAttributes.Public;
            if (fieldDefinition.IsStatic)
            {
                fieldAttribute |= Cecil.FieldAttributes.Static;
            }

            Cecil.TypeReference   fieldType  = ReferenceGenerator.TypeReference(fieldDefinition.Type);
            Cecil.FieldDefinition cecilField = new Cecil.FieldDefinition(fieldDefinition.Name, fieldAttribute, fieldType);

            if (fieldDefinition.Value != null)
            {
                cecilField.Constant    = fieldDefinition.Value.Value;
                cecilField.HasConstant = true;
            }

            byte[] newArray = new byte[fieldDefinition.InitialValue.Length];
            Array.Copy(fieldDefinition.InitialValue, newArray, newArray.Length);
            cecilField.InitialValue = newArray;

            if (newArray.Length > 0)
            {
                cecilField.Attributes |= Cecil.FieldAttributes.HasFieldRVA;
            }

            return(cecilField);
        }
Esempio n. 2
0
        private void ExtractFields(AnalysisNet.Types.TypeDefinition containingType, IList <AnalysisNet.Types.FieldDefinition> dest, IEnumerable <Cecil.FieldDefinition> source)
        {
            foreach (Cecil.FieldDefinition fielddef in source)
            {
                string name = fielddef.Name;
                AnalysisNet.Types.IType           type  = ExtractType(fielddef.FieldType);
                AnalysisNet.Types.FieldDefinition field = new AnalysisNet.Types.FieldDefinition(name, type);

                byte[] newArray = new byte[fielddef.InitialValue.Length];
                Array.Copy(fielddef.InitialValue, newArray, newArray.Length);
                field.InitialValue = newArray;

                ExtractCustomAttributes(field.Attributes, fielddef.CustomAttributes);

                field.Visibility     = ExtractVisibilityKind(fielddef);
                field.IsStatic       = fielddef.IsStatic;
                field.ContainingType = containingType;
                dest.Add(field);
            }
        }
Esempio n. 3
0
        private void ExtractConstants(AnalysisNet.Types.TypeDefinition containingType, IList <AnalysisNet.Types.FieldDefinition> dest, IEnumerable <Cecil.FieldDefinition> source)
        {
            source = source.Skip(1);

            foreach (Cecil.FieldDefinition constdef in source)
            {
                if (!constdef.HasConstant)
                {
                    continue;
                }

                string name = constdef.Name;
                AnalysisNet.Types.FieldDefinition constant = new AnalysisNet.Types.FieldDefinition(name, containingType)
                {
                    Value = new AnalysisNet.ThreeAddressCode.Values.Constant(constdef.Constant)
                    {
                        Type = containingType.UnderlayingType
                    }
                };

                constant.ContainingType = containingType;
                dest.Add(constant);
            }
        }