internal static SectionHeader ReadSectionHeader(MemoryCursor/*!*/ c) { SectionHeader header = new SectionHeader(); header.name = c.ReadASCII(8); header.virtualSize = c.Int32(0); header.virtualAddress = c.Int32(1); header.sizeOfRawData = c.Int32(2); header.pointerToRawData = c.Int32(3); header.pointerToRelocations = c.Int32(4); header.pointerToLinenumbers = c.Int32(5); c.SkipInt32(6); header.numberOfRelocations = c.UInt16(0); header.numberOfLinenumbers = c.UInt16(1); c.SkipInt16(2); header.characteristics = c.Int32(0); c.SkipInt32(1); return header; }
private static StreamHeader ReadStreamHeader(MemoryCursor/*!*/ c) { StreamHeader header = new StreamHeader(); header.offset = c.ReadInt32(); header.size = c.ReadInt32(); header.name = c.ReadASCII(); int n = header.name.Length + 1; c.Position += (4 - (n % 4)) % 4; return header; }
private static MetadataHeader/*!*/ ReadMetadataHeader(MemoryCursor/*!*/ c) { MetadataHeader header = new MetadataHeader(); header.signature = c.ReadInt32(); if (header.signature != 0x424a5342) throw new InvalidMetadataException(ExceptionStrings.BadMetadataHeaderSignature); header.majorVersion = c.ReadUInt16(); header.minorVersion = c.ReadUInt16(); header.reserved = c.ReadInt32(); int len = c.ReadInt32(); header.versionString = c.ReadASCII(len); while (len++ % 4 != 0) c.ReadByte(); header.flags = c.ReadUInt16(); int n = c.ReadUInt16(); StreamHeader[] streamHeaders = header.streamHeaders = new StreamHeader[n]; for (int i = 0; i < n; i++) streamHeaders[i] = ReadStreamHeader(c); return header; }