public MetaDataHeader(AssemblyBuffer buffer, CLRHeader clrHeader, SectionsHeaders sectionsHeaders) { buffer.SetIndexPointer(clrHeader.MetaData.RVA - 0x1E00); this.Signature = buffer.ReadDWord(); this.MajorVersion = buffer.ReadWord(); this.MinorVersion = buffer.ReadWord(); this.Reserved = buffer.ReadDWord(); this.VersionLength = buffer.ReadDWord(); this.VersionString = buffer.ReadStringOfLength(this.VersionLength); this.Flags = buffer.ReadWord(); this.NumberOfStreams = buffer.ReadWord(); this.Streams = new StreamHeader[this.NumberOfStreams]; this.Streams[(uint)MetaDataStreamType.DEFS_AND_REFS] = new DefsAndRefsStream(buffer, clrHeader, this); this.Streams[(uint)MetaDataStreamType.STRINGS] = new StringStream(buffer, clrHeader); // These are boiler plate. this.Streams[(uint)MetaDataStreamType.US] = new StringStream(buffer, clrHeader); this.Streams[(uint)MetaDataStreamType.GUID] = new StringStream(buffer, clrHeader); this.Streams[(uint)MetaDataStreamType.BLOB] = new BlobStream(buffer, clrHeader); // There is a specific load order for each stream. Therefore I'm not going to iterate over them. this.Streams[(uint)MetaDataStreamType.STRINGS].CacheBuffer(buffer); this.Streams[(uint)MetaDataStreamType.STRINGS].ProcessTables(buffer); this.Streams[(uint)MetaDataStreamType.BLOB].CacheBuffer(buffer); this.Streams[(uint)MetaDataStreamType.BLOB].ProcessTables(buffer); this.Streams[(uint)MetaDataStreamType.DEFS_AND_REFS].CacheBuffer(buffer); this.Streams[(uint)MetaDataStreamType.DEFS_AND_REFS].ProcessTables(buffer); }
public CLRHeader(AssemblyBuffer buffer, OptionalHeader header, SectionsHeaders sectionsHeaders) { this.cb = buffer.ReadDWord(); this.MajorRuntimeVersion = buffer.ReadWord(); this.MinorRuntimeVersion = buffer.ReadWord(); this.MetaData = new DataDirectory(buffer); this.Flags = buffer.ReadDWord(); this.EntryPointTokenOrEntryPointRVA = buffer.ReadDWord(); this.Resources = new DataDirectory(buffer); this.StrongNameSignature = new DataDirectory(buffer); this.CodeManagerTable = new DataDirectory(buffer); this.VTableFixups = new DataDirectory(buffer); this.ExportAddressTableJumps = new DataDirectory(buffer); this.ManagedNativeHeader = new DataDirectory(buffer); }