public FileInfoSubstream(Stream s) { NumModules = StreamHelper.ReadU16(s); NumSourceFiles = StreamHelper.ReadU16(s); for (int i = 0; i < NumModules; i++) { ModIndices.Add(StreamHelper.ReadU16(s)); } uint totalCount = 0; for (int i = 0; i < NumModules; i++) { ModFileCounts.Add(StreamHelper.ReadU16(s)); totalCount += ModFileCounts[i]; } for (int i = 0; i < totalCount; i++) { FileNameOffsets.Add(StreamHelper.ReadU32(s)); } FileNameOffsets = FileNameOffsets.Distinct().ToList(); long pos = s.Position; foreach (uint offset in FileNameOffsets) { s.Seek(pos + offset, 0); NamesBuffer.Add(offset, StreamHelper.ReadCString(s)); } }
public SectionMapEntry(Stream s) { Flags = StreamHelper.ReadU16(s); Ovl = StreamHelper.ReadU16(s); Group = StreamHelper.ReadU16(s); Frame = StreamHelper.ReadU16(s); SectionName = StreamHelper.ReadU16(s); ClassName = StreamHelper.ReadU16(s); Offset = StreamHelper.ReadU32(s); SectionLength = StreamHelper.ReadU32(s); }
public SectionContribEntry(Stream s) { Section = StreamHelper.ReadU16(s); StreamHelper.ReadU16(s); Offset = StreamHelper.ReadU32(s); Size = StreamHelper.ReadU32(s); Characteristics = StreamHelper.ReadU32(s); DataCrc = StreamHelper.ReadU32(s); RelocCrc = StreamHelper.ReadU32(s); ModuleIndex = StreamHelper.ReadU16(s); StreamHelper.ReadU16(s); }
public SymbolRecord(Stream s) { reclen = StreamHelper.ReadU16(s); long pos = s.Position; rectyp = StreamHelper.ReadU16(s); pubsymflags = StreamHelper.ReadU32(s); off = StreamHelper.ReadU32(s); seg = StreamHelper.ReadU16(s); name = StreamHelper.ReadCString(s); while (s.Position - pos < reclen) { s.ReadByte(); } }
public DebugInfoStream(Stream s) { VersionSignature = StreamHelper.ReadU32(s); VersionHeader = StreamHelper.ReadU32(s); Age = StreamHelper.ReadU32(s); GlobalStreamIndex = StreamHelper.ReadU16(s); BuildNumber = StreamHelper.ReadU16(s); PublicStreamIndex = StreamHelper.ReadU16(s); PdbDllVersion = StreamHelper.ReadU16(s); SymRecordStream = StreamHelper.ReadU16(s); PdbDllRbld = StreamHelper.ReadU16(s); ModInfoSize = StreamHelper.ReadU32(s); SectionContributionSize = StreamHelper.ReadU32(s); SectionMapSize = StreamHelper.ReadU32(s); SourceInfoSize = StreamHelper.ReadU32(s); TypeServerMapSize = StreamHelper.ReadU32(s); MFCTypeServerIndex = StreamHelper.ReadU32(s); OptionalDbgHeaderSize = StreamHelper.ReadU32(s); ECSubstreamSize = StreamHelper.ReadU32(s); Flags = StreamHelper.ReadU16(s); Machine = StreamHelper.ReadU16(s); StreamHelper.ReadU32(s); long pos = s.Position; while (s.Position - pos < ModInfoSize) { modInfo.Add(new ModInfo(s)); } pos = s.Position; uint magic = StreamHelper.ReadU32(s); while (s.Position - pos < SectionContributionSize) { contribs.Add(new SectionContribEntry(s)); if (magic == 0xF13151E4) { StreamHelper.ReadU32(s); } } pos = s.Position; StreamHelper.ReadU32(s); while (s.Position - pos < SectionMapSize) { sectionMap.Add(new SectionMapEntry(s)); } fileInfo = new FileInfoSubstream(s); }
public TypeRecord(Stream s) { pos = (uint)(s.Position - 4); size = (ushort)(StreamHelper.ReadU16(s) - 2); type = StreamHelper.ReadU16(s); switch (type) { case 0x1203: ReadFieldList(s); break; default: byte[] raw = new byte[size]; s.Read(raw, 0, size); break; } }
public ModInfo(Stream s) { StreamHelper.ReadU32(s); sce = new SectionContribEntry(s); Flags = StreamHelper.ReadU16(s); ModuleSymStream = StreamHelper.ReadU16(s); SymByteSize = StreamHelper.ReadU32(s); C11ByteSize = StreamHelper.ReadU32(s); C13ByteSize = StreamHelper.ReadU32(s); SourceFileCount = StreamHelper.ReadU16(s); StreamHelper.ReadU16(s); StreamHelper.ReadU32(s); SourceFileNameIndex = StreamHelper.ReadU32(s); PdbFilePathNameIndex = StreamHelper.ReadU32(s); ModuleName = StreamHelper.ReadCString(s); ObjFileName = StreamHelper.ReadCString(s); StreamHelper.Align(s); }
public TPIStream(Stream s) { Version = StreamHelper.ReadU32(s); HeaderSize = StreamHelper.ReadU32(s); TypeIndexBegin = StreamHelper.ReadU32(s); TypeIndexEnd = StreamHelper.ReadU32(s); TypeRecordBytes = StreamHelper.ReadU32(s); HashStreamIndex = StreamHelper.ReadU16(s); HashAuxStreamIndex = StreamHelper.ReadU16(s); HashKeySize = StreamHelper.ReadU32(s); NumHashBuckets = StreamHelper.ReadU32(s); HashValueBufferOffset = StreamHelper.ReadU32(s); HashValueBufferLength = StreamHelper.ReadU32(s); IndexOffsetBufferOffset = StreamHelper.ReadU32(s); IndexOffsetBufferLength = StreamHelper.ReadU32(s); HashAdjBufferOffset = StreamHelper.ReadU32(s); HashAdjBufferLength = StreamHelper.ReadU32(s); long pos = s.Position; while (s.Position - pos < TypeRecordBytes) { records.Add(new TypeRecord(s)); } }
public FieldListEntry(Stream s) { pos = (uint)s.Position; u1 = StreamHelper.ReadU16(s); switch (u1) { case 0x1502: u2 = StreamHelper.ReadU16(s); u3 = StreamHelper.ReadU16(s); if ((u3 & 0x8000) != 0) { u4 = StreamHelper.ReadU32(s); } name = StreamHelper.ReadCString(s); break; case 0x150D: u2 = StreamHelper.ReadU16(s); u3 = StreamHelper.ReadU16(s); u4 = StreamHelper.ReadU32(s); if ((u4 & 0x80000000) != 0) { u5 = StreamHelper.ReadU32(s); } name = StreamHelper.ReadCString(s); break; case 0x150E: case 0x150F: case 0x1510: case 0x1511: u2 = StreamHelper.ReadU16(s); u3 = StreamHelper.ReadU16(s); u4 = StreamHelper.ReadU16(s); if ((u2 & 0x10) != 0 && u2 != 0x16) { u5 = StreamHelper.ReadU32(s); } name = StreamHelper.ReadCString(s); break; case 0x1400: u2 = StreamHelper.ReadU16(s); u3 = StreamHelper.ReadU16(s); u4 = StreamHelper.ReadU32(s); name = ""; break; case 0x1401: u2 = StreamHelper.ReadU16(s); u3 = StreamHelper.ReadU16(s); u4 = StreamHelper.ReadU32(s); StreamHelper.ReadU32(s); StreamHelper.ReadU16(s); name = ""; break; case 0x1402: u2 = StreamHelper.ReadU16(s); u3 = StreamHelper.ReadU16(s); u4 = StreamHelper.ReadU32(s); u5 = StreamHelper.ReadU32(s); StreamHelper.ReadU16(s); name = ""; break; case 0x1404: u2 = StreamHelper.ReadU16(s); u3 = StreamHelper.ReadU16(s); u4 = StreamHelper.ReadU16(s); u5 = StreamHelper.ReadU16(s); StreamHelper.ReadU16(s); name = ""; break; case 0x1409: u2 = StreamHelper.ReadU16(s); u3 = StreamHelper.ReadU16(s); u4 = StreamHelper.ReadU16(s); name = ""; break; default: throw new Exception(); } StreamHelper.Align(s); }