public ModuleDefinition(MetadataHeader header, MetadataToken token, MetadataRow <ushort, uint, uint, uint, uint> row) : base(header, token, row) { var stringStream = header.GetStream <StringStream>(); var guidStream = header.GetStream <GuidStream>(); Generation = row.Column1; _name = new LazyValue <string>(() => stringStream.GetStringByOffset(row.Column2)); _mvid = new LazyValue <Guid>(() => guidStream.GetGuidByOffset(row.Column3)); _encId = new LazyValue <Guid>(() => guidStream.GetGuidByOffset(row.Column4)); _encBaseId = new LazyValue <Guid>(() => guidStream.GetGuidByOffset(row.Column5)); }
internal EventDefinition(MetadataHeader header, MetadataToken token, MetadataRow <ushort, uint, uint> row) : base(header, token, row) { Attributes = (EventAttributes)row.Column1; _name = new LazyValue <string>(() => header.GetStream <StringStream>().GetStringByOffset(row.Column2)); _eventType = new LazyValue <ITypeDefOrRef>(() => { var tableStream = header.GetStream <TableStream>(); var eventTypeToken = tableStream.GetIndexEncoder(CodedIndex.TypeDefOrRef).DecodeIndex(row.Column3); return(eventTypeToken.Rid != 0 ? (ITypeDefOrRef)tableStream.ResolveMember(eventTypeToken) : null); }); }
internal AssemblyReference(MetadataHeader header, MetadataToken token, MetadataRow <ushort, ushort, ushort, ushort, uint, uint, uint, uint, uint> row) : base(header, token, row) { var stringStream = header.GetStream <StringStream>(); var blobStream = header.GetStream <BlobStream>(); Version = new Version(row.Column1, row.Column2, row.Column3, row.Column4); Attributes = (AssemblyAttributes)row.Column5; _publicKey = new LazyValue <DataBlobSignature>(() => row.Column6 == 0 ? null : DataBlobSignature.FromReader(blobStream.CreateBlobReader(row.Column6))); _name = new LazyValue <string>(() => stringStream.GetStringByOffset(row.Column7)); _culture = new LazyValue <string>(() => stringStream.GetStringByOffset(row.Column8)); _hashValue = new LazyValue <DataBlobSignature>(() => row.Column9 == 0 ? null : DataBlobSignature.FromReader(blobStream.CreateBlobReader(row.Column9))); }
internal FieldMarshal(MetadataHeader header, MetadataToken token, MetadataRow <uint, uint> row) : base(header, token, row) { var tableStream = header.GetStream <TableStream>(); var blobStream = header.GetStream <BlobStream>(); _parent = new LazyValue <IHasFieldMarshal>(() => { var parentToken = tableStream.GetIndexEncoder(CodedIndex.HasFieldMarshal).DecodeIndex(row.Column1); return(parentToken.Rid != 0 ? (IHasFieldMarshal)tableStream.ResolveMember(parentToken) : null); }); _marshalDescriptor = new LazyValue <MarshalDescriptor>(() => MarshalDescriptor.FromReader(blobStream.CreateBlobReader(row.Column2))); }
internal Constant(MetadataHeader header, MetadataToken token, MetadataRow <byte, byte, uint, uint> row) : base(header, token, row) { ConstantType = (ElementType)row.Column1; _parent = new LazyValue <IHasConstant>(() => { var tableStream = header.GetStream <TableStream>(); var hasConstantToken = tableStream.GetIndexEncoder(CodedIndex.HasConstant).DecodeIndex(row.Column3); return(hasConstantToken.Rid != 0 ? (IHasConstant)tableStream.ResolveMember(hasConstantToken) : null); }); _value = new LazyValue <DataBlobSignature>(() => DataBlobSignature.FromReader(header.GetStream <BlobStream>().CreateBlobReader(row.Column4))); }
internal PropertyMap(MetadataHeader header, MetadataToken token, MetadataRow <uint, uint> row) : base(header, token, row) { var tableStream = header.GetStream <TableStream>(); _parent = new LazyValue <TypeDefinition>(() => tableStream.GetTable <TypeDefinition>()[(int)row.Column1 - 1]); }
internal MetadataImage(MetadataHeader header) { if (header == null) { throw new ArgumentNullException("header"); } Header = header; var tableStream = header.GetStream <TableStream>(); var table = tableStream.GetTable(MetadataTokenType.Assembly); MetadataRow assemblyRow; if (table.TryGetRow(0, out assemblyRow)) { Assembly = (AssemblyDefinition)table.GetMemberFromRow(this, assemblyRow); } else { Assembly = new AssemblyDefinition(null, new Version()); } TypeSystem = new TypeSystem(this, Assembly.Name == "mscorlib"); MetadataResolver = new DefaultMetadataResolver(new DefaultNetAssemblyResolver()); }
internal GenericParameter(MetadataHeader header, MetadataToken token, MetadataRow <ushort, ushort, uint, uint> row) : base(header, token, row) { var tableStream = header.GetStream <TableStream>(); Index = row.Column1; Attributes = (GenericParameterAttributes)row.Column2; _owner = new LazyValue <IGenericParameterProvider>(() => { var ownerToken = tableStream.GetIndexEncoder(CodedIndex.TypeOrMethodDef).DecodeIndex(row.Column3); return(ownerToken.Rid != 0 ? (IGenericParameterProvider)tableStream.ResolveMember(ownerToken) : null); }); _name = new LazyValue <string>(() => header.GetStream <StringStream>().GetStringByOffset(row.Column4)); }
public static TypeSignature ParseType(MetadataHeader header, string name) { int position = 0; var defaultScope = header == null ? null : header.GetStream <TableStream>().GetTable <ModuleDefinition>()[0]; var type = ReadTypeSignature(defaultScope, name, ref position); if (position >= name.Length) { return(type); } position++; SkipSpaces(name, ref position); var elementType = ((TypeReference)type.GetElementType()); while (elementType.DeclaringType != null) { elementType = (TypeReference)elementType.DeclaringType; } if (position >= name.Length) { return(type); } elementType.ResolutionScope = ReadAssemblyReference(name, ref position); return(type); }
internal AssemblyRefProcessor(MetadataHeader header, MetadataToken token, MetadataRow <uint, uint> row) : base(header, token, row) { Processor = row.Column1; _reference = new LazyValue <AssemblyReference>(() => header.GetStream <TableStream>().GetTable <AssemblyReference>()[(int)(row.Column1 - 1)]); }
internal MemberReference(MetadataHeader header, MetadataToken token, MetadataRow <uint, uint, uint> row) : base(header, token, row) { var tableStream = header.GetStream <TableStream>(); _parent = new LazyValue <IMemberRefParent>(() => { var parentToken = tableStream.GetIndexEncoder(CodedIndex.MemberRefParent).DecodeIndex(row.Column1); return(parentToken.Rid != 0 ? (IMemberRefParent)tableStream.ResolveMember(parentToken) : null); }); _name = new LazyValue <string>(() => header.GetStream <StringStream>().GetStringByOffset(row.Column2)); _signature = new LazyValue <MemberSignature>(() => CallingConventionSignature.FromReader(header, header.GetStream <BlobStream>().CreateBlobReader(row.Column3)) as MemberSignature); }
internal PropertyDefinition(MetadataHeader header, MetadataToken token, MetadataRow <ushort, uint, uint> row) : base(header, token, row) { Attributes = (PropertyAttributes)row.Column1; _name = new LazyValue <string>(() => header.GetStream <StringStream>().GetStringByOffset(row.Column2)); _signature = new LazyValue <PropertySignature>(() => PropertySignature.FromReader(header, header.GetStream <BlobStream>().CreateBlobReader(row.Column3))); }
internal FileDefinition(MetadataHeader header, MetadataToken token, MetadataRow <uint, uint, uint> row) : base(header, token, row) { Attributes = (FileAttributes)row.Column1; _name = new LazyValue <string>(() => header.GetStream <StringStream>().GetStringByOffset(row.Column2)); _hashValue = new LazyValue <DataBlobSignature>(() => DataBlobSignature.FromReader(header.GetStream <BlobStream>().CreateBlobReader(row.Column3))); }
protected static void WriteTypeDefOrRef(MetadataHeader header, IBinaryStreamWriter writer, ITypeDefOrRef type) { var encoder = header.GetStream <TableStream>() .GetIndexEncoder(CodedIndex.TypeDefOrRef); writer.WriteCompressedUInt32(encoder.EncodeToken(type.MetadataToken)); }
internal AssemblyRefOs(MetadataHeader header, MetadataToken token, MetadataRow <uint, uint, uint, uint> row) : base(header, token, row) { PlatformId = row.Column1; MajorVersion = row.Column2; MinorVersion = row.Column3; Reference = header.GetStream <TableStream>().GetTable <AssemblyReference>()[(int)(row.Column4 - 1)]; }
internal FieldLayout(MetadataHeader header, MetadataToken token, MetadataRow <uint, uint> row) : base(header, token, row) { Offset = row.Column1; var tableStream = header.GetStream <TableStream>(); _field = new LazyValue <FieldDefinition>(() => tableStream.GetTable <FieldDefinition>()[(int)(row.Column2 - 1)]); }
internal MethodDefinition(MetadataHeader header, MetadataToken token, MetadataRow <uint, ushort, ushort, uint, uint, uint> row) : base(header, token, row) { var stringStream = header.GetStream <StringStream>(); var blobStream = header.GetStream <BlobStream>(); Rva = row.Column1; ImplAttributes = (MethodImplAttributes)row.Column2; Attributes = (MethodAttributes)row.Column3; _name = new LazyValue <string>(() => stringStream.GetStringByOffset(row.Column4)); IBinaryStreamReader blobReader; if (blobStream.TryCreateBlobReader(row.Column5, out blobReader)) { _signature = new LazyValue <MethodSignature>(() => MethodSignature.FromReader(header, blobReader)); } }
internal PInvokeImplementation(MetadataHeader header, MetadataToken token, MetadataRow <ushort, uint, uint, uint> row) : base(header, token, row) { var tableStream = header.GetStream <TableStream>(); Attributes = (PInvokeImplementationAttributes)row.Column1; _memberForwarded = new LazyValue <IMemberForwarded>(() => { var memberForwardedToken = tableStream.GetIndexEncoder(CodedIndex.MemberForwarded).DecodeIndex(row.Column2); return(memberForwardedToken.Rid != 0 ? (IMemberForwarded)tableStream.ResolveMember(memberForwardedToken) : null); }); _importName = new LazyValue <string>(() => header.GetStream <StringStream>().GetStringByOffset(row.Column3)); _importScope = new LazyValue <ModuleReference>(() => tableStream.GetTable <ModuleReference>()[(int)(row.Column4 - 1)]); }
internal ParameterDefinition(MetadataHeader header, MetadataToken token, MetadataRow <ushort, ushort, uint> row) : base(header, token, row) { var stringStream = header.GetStream <StringStream>(); Attributes = (ParameterAttributes)row.Column1; Sequence = row.Column2; _name = new LazyValue <string>(() => stringStream.GetStringByOffset(row.Column3)); }
public ClassLayout(MetadataHeader header, MetadataToken token, MetadataRow <ushort, uint, uint> row) : base(header, token, row) { PackingSize = row.Column1; ClassSize = row.Column2; var tableStream = header.GetStream <TableStream>(); _parent = new LazyValue <TypeDefinition>(() => tableStream.GetTable <TypeDefinition>()[(int)(row.Column3 - 1)]); }
internal ExportedType(MetadataHeader header, MetadataToken token, MetadataRow <uint, uint, uint, uint, uint> row) : base(header, token, row) { var tableStream = header.GetStream <TableStream>(); var stringStream = header.GetStream <StringStream>(); Attributes = (TypeAttributes)row.Column1; TypeDefId = row.Column2; _typeName = new LazyValue <string>(() => stringStream.GetStringByOffset(row.Column3)); _typeNamespace = new LazyValue <string>(() => stringStream.GetStringByOffset(row.Column4)); _implementation = new LazyValue <IImplementation>(() => { var implementationToken = tableStream.GetIndexEncoder(CodedIndex.Implementation) .DecodeIndex(row.Column5); return(implementationToken.Rid != 0 ? Implementation = (IImplementation)tableStream.ResolveMember(implementationToken) : null); }); }
internal FieldDefinition(MetadataHeader header, MetadataToken token, MetadataRow <ushort, uint, uint> row) : base(header, token, row) { var stringStream = header.GetStream <StringStream>(); Attributes = (FieldAttributes)row.Column1; _name = new LazyValue <string>(() => stringStream.GetStringByOffset(row.Column2)); _signature = new LazyValue <FieldSignature>(() => FieldSignature.FromReader(header, header.GetStream <BlobStream>().CreateBlobReader(row.Column3))); }
internal StandAloneSignature(MetadataHeader header, MetadataToken token, MetadataRow <uint> row) : base(header, token, row) { _signature = new LazyValue <CallingConventionSignature>(() => { IBinaryStreamReader reader; return(header.GetStream <BlobStream>().TryCreateBlobReader(row.Column1, out reader) ? CallingConventionSignature.FromReader(header, reader) : null); }); }
internal TypeReference(MetadataHeader header, MetadataToken token, MetadataRow <uint, uint, uint> row) : base(header, token, row) { var stringStream = header.GetStream <StringStream>(); var tableStream = header.GetStream <TableStream>(); var resolutionScopeToken = tableStream.GetIndexEncoder(CodedIndex.ResolutionScope).DecodeIndex(row.Column1); if (resolutionScopeToken.Rid != 0) { MetadataMember resolutionScope; if (tableStream.TryResolveMember(resolutionScopeToken, out resolutionScope)) { ResolutionScope = resolutionScope as IResolutionScope; } } _name = new LazyValue <string>(() => stringStream.GetStringByOffset(row.Column2)); _namespace = new LazyValue <string>(() => stringStream.GetStringByOffset(row.Column3)); }
internal ManifestResource(MetadataHeader header, MetadataToken token, MetadataRow <uint, uint, uint, uint> row) : base(header, token, row) { var tableStream = header.GetStream <TableStream>(); Offset = row.Column1; Attributes = (ManifestResourceAttributes)row.Column2; _name = new LazyValue <string>(() => header.GetStream <StringStream>().GetStringByOffset(row.Column3)); _implementation = new LazyValue <IImplementation>(() => { var implementationToken = tableStream.GetIndexEncoder(CodedIndex.Implementation) .DecodeIndex(row.Column4); return(implementationToken.Rid != 0 ? (IImplementation)tableStream.ResolveMember(implementationToken) : null); }); _data = new LazyValue <byte[]>(() => Implementation == null && Header != null ? Header.NetDirectory.GetResourceData(Offset) : null); }
internal GenericParameterConstraint(MetadataHeader header, MetadataToken token, MetadataRow <uint, uint> row) : base(header, token, row) { var tableStream = header.GetStream <TableStream>(); _owner = new LazyValue <GenericParameter>(() => tableStream.GetTable <GenericParameter>()[(int)(row.Column1 - 1)]); _constraint = new LazyValue <ITypeDefOrRef>(() => { var constraintToken = tableStream.GetIndexEncoder(CodedIndex.TypeDefOrRef).DecodeIndex(row.Column2); return(constraintToken.Rid != 0 ? (ITypeDefOrRef)tableStream.ResolveMember(constraintToken) : null); }); }
public InterfaceImplementation(MetadataHeader header, MetadataToken token, MetadataRow <uint, uint> row) : base(header, token, row) { var tableStream = header.GetStream <TableStream>(); Class = tableStream.GetTable <TypeDefinition>()[(int)(row.Column1 - 1)]; var interfaceToken = tableStream.GetIndexEncoder(CodedIndex.TypeDefOrRef).DecodeIndex(row.Column2); if (interfaceToken.Rid != 0) { Interface = (ITypeDefOrRef)tableStream.ResolveMember(interfaceToken); } }
internal MethodSpecification(MetadataHeader header, MetadataToken token, MetadataRow <uint, uint> row) : base(header, token, row) { var tableStream = header.GetStream <TableStream>(); _method = new LazyValue <IMethodDefOrRef>(() => { var methodToken = tableStream.GetIndexEncoder(CodedIndex.MethodDefOrRef).DecodeIndex(row.Column1); return(methodToken.Rid != 0 ? (IMethodDefOrRef)tableStream.ResolveMember(methodToken) : null); }); _signature = new LazyValue <GenericInstanceMethodSignature>(() => GenericInstanceMethodSignature.FromReader(header, header.GetStream <BlobStream>().CreateBlobReader(row.Column2))); }
internal TypeDefinition(MetadataHeader header, MetadataToken token, MetadataRow <uint, uint, uint, uint, uint, uint> row) : base(header, token, row) { var stringStream = header.GetStream <StringStream>(); var tableStream = header.GetStream <TableStream>(); Attributes = (TypeAttributes)row.Column1; _name = _namespace = new LazyValue <string>(() => stringStream.GetStringByOffset(row.Column2)); _namespace = new LazyValue <string>(() => stringStream.GetStringByOffset(row.Column3)); _baseType = new LazyValue <ITypeDefOrRef>(() => { var baseTypeToken = tableStream.GetIndexEncoder(CodedIndex.TypeDefOrRef).DecodeIndex(row.Column4); if (baseTypeToken.Rid != 0) { MetadataMember baseType; if (tableStream.TryResolveMember(baseTypeToken, out baseType)) { return(baseType as ITypeDefOrRef); } } return(null); }); }
internal FieldRva(MetadataHeader header, MetadataToken token, MetadataRow <uint, uint> row) : base(header, token, row) { Rva = row.Column1; _field = new LazyValue <FieldDefinition>(() => header.GetStream <TableStream>().GetTable <FieldDefinition>()[(int)(row.Column2 - 1)]); _data = new LazyValue <byte[]>(() => { var assembly = Header.NetDirectory.Assembly; var reader = assembly.ReadingContext.Reader.CreateSubReader(assembly.RvaToFileOffset(Rva), GetDataSize()); return(reader.ReadBytes((int)reader.Length)); }); }
public TypeSystem(MetadataHeader header, bool isMsCorLib) { _header = header; _isMsCorLib = isMsCorLib; if (!isMsCorLib) { MsCorLibReference = header.GetStream<TableStream>().GetTable<AssemblyReference>().FirstOrDefault(x => x.Name == "mscorlib"); if (MsCorLibReference == null) { MsCorLibReference = new AssemblyReference(new ReflectionAssemblyNameWrapper(typeof(object).Assembly.GetName())) { Header = header, Culture = "neutral", Version = new Version(header.VersionString[1] - 48, 0, 0, 0) }; } } Boolean = CreateSignature(ElementType.Boolean, "Boolean", true); SByte = CreateSignature(ElementType.I1, "SByte", true); Int16 = CreateSignature(ElementType.I2, "Int16", true); Int32 = CreateSignature(ElementType.I4, "Int32", true); Int64 = CreateSignature(ElementType.I8, "Int64", true); IntPtr = CreateSignature(ElementType.I, "IntPtr", true); Byte = CreateSignature(ElementType.U1, "Byte", true); UInt16 = CreateSignature(ElementType.U2, "UInt16", true); UInt32 = CreateSignature(ElementType.U4, "UInt32", true); UInt64 = CreateSignature(ElementType.U8, "UInt64", true); UIntPtr = CreateSignature(ElementType.U, "UIntPtr", true); Single = CreateSignature(ElementType.R4, "Single", true); Double = CreateSignature(ElementType.R8, "Double", true); Object = CreateSignature(ElementType.Object, "Object", false); Char = CreateSignature(ElementType.Char, "Char", true); String = CreateSignature(ElementType.String, "String", false); Type = CreateSignature(ElementType.Type, "Type", false); TypedReference = CreateSignature(ElementType.TypedByRef, "TypedReference", true); Void = CreateSignature(ElementType.Void, "Void", true); }
public static TypeSignature ParseType(MetadataHeader header, string name) { int position = 0; var defaultScope = header == null ? null : header.GetStream<TableStream>().GetTable<ModuleDefinition>()[0]; var type = ReadTypeSignature(defaultScope, name, ref position); if (position >= name.Length) return type; position++; SkipSpaces(name, ref position); var elementType = ((TypeReference)type.GetElementType()); while (elementType.DeclaringType != null) elementType = (TypeReference)elementType.DeclaringType; if (position >= name.Length) return type; elementType.ResolutionScope = ReadAssemblyReference(name, ref position); return type; }
protected static void WriteTypeDefOrRef(MetadataHeader header, IBinaryStreamWriter writer, ITypeDefOrRef type) { var encoder = header.GetStream<TableStream>() .GetIndexEncoder(CodedIndex.TypeDefOrRef); writer.WriteCompressedUInt32(encoder.EncodeToken(type.MetadataToken)); }
protected static ITypeDefOrRef ReadTypeDefOrRef(MetadataHeader header, IBinaryStreamReader reader) { var tableStream = header.GetStream<TableStream>(); uint codedIndex; if (!reader.TryReadCompressedUInt32(out codedIndex)) return null; MetadataMember type; tableStream.TryResolveMember(tableStream.GetIndexEncoder(CodedIndex.TypeDefOrRef) .DecodeIndex(codedIndex), out type); return type as ITypeDefOrRef; }