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 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 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 void ReadGlobalNameTable() { toc = new TOCStream(new MemoryStream(GetStreamData(rootStreams[1]))); names = new List <string>(); foreach (KeyValuePair <string, uint> pair in toc.files) { if (pair.Key == "/names") { MemoryStream m = new MemoryStream(GetStreamData(rootStreams[pair.Value])); m.Seek(0x8, 0); uint size = StreamHelper.ReadU32(m) + 0xC; while (m.Position < size) { names.Add(StreamHelper.ReadCString(m)); } } rootStreams[pair.Value].name1 = pair.Key; } }
public TOCStream(Stream s) { s.Seek(0x1C, 0); uint stringTableSize = StreamHelper.ReadU32(s); byte[] sTable = new byte[stringTableSize]; s.Read(sTable, 0, (int)stringTableSize); MemoryStream st = new MemoryStream(sTable); uint count = StreamHelper.ReadU32(s); s.Seek(0x10, SeekOrigin.Current); int pos = (int)s.Position; for (int i = 0; i < count; i++) { s.Seek(pos + i * 8, 0); uint start = StreamHelper.ReadU32(s); uint streamIdx = StreamHelper.ReadU32(s); st.Seek(start, 0); string name = StreamHelper.ReadCString(st); files.Add(name, streamIdx); } }
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); }