diff --git a/MetadataProvider/AssemblyExtractor.cs b/MetadataProvider/AssemblyExtractor.cs index 66787d90..cf8eb4d2 100644 --- a/MetadataProvider/AssemblyExtractor.cs +++ b/MetadataProvider/AssemblyExtractor.cs @@ -472,6 +472,17 @@ private void ExtractField(SRM.FieldDefinitionHandle handle) field.Visibility = GetVisibilityKind(fielddef.Attributes); field.Value = ExtractFieldDefaultValue(fielddef); + field.SpecifiesRelativeVirtualAddress = fielddef.Attributes.HasFlag(SR.FieldAttributes.HasFieldRVA); + if (field.SpecifiesRelativeVirtualAddress) + { + var fieldDataReader = reader.GetSectionData(fielddef.GetRelativeVirtualAddress()).GetReader(); + var fieldData = fieldDataReader.ReadBytes(fieldDataReader.Length); + field.Value = new Constant(fieldData) + { + Type = new ArrayType(PlatformTypes.Byte) + }; + } + currentType.Fields.Add(field); } diff --git a/Model/Types/TypeDefinitions.cs b/Model/Types/TypeDefinitions.cs index 27062ea7..ab1f8da4 100644 --- a/Model/Types/TypeDefinitions.cs +++ b/Model/Types/TypeDefinitions.cs @@ -112,7 +112,7 @@ public class FieldDefinition : ITypeMemberDefinition, IFieldReference public Constant Value { get; set; } public bool IsStatic { get; set; } - + public bool SpecifiesRelativeVirtualAddress { get; set; } public FieldDefinition(string name, IType type) { this.Name = name;