private Mod ParseSingleModule(int modi, MSFStreamEntireFile ef) { int begin = ReadOffset; var ret = new Mod(); ret.UnusedModuleHeader = ExtractInt32(); ParseSectionContribution(); ret.Flags = ExtractInt16(); ret.StreamNumber = ExtractInt16(); ret.SymbolSize = ExtractUInt32(); ret.LineNumberBytes = ExtractUInt32(); ret.C13LineNumberBytes = ExtractUInt32(); ret.NumContributingFiles = ExtractInt16(); ret.Padding = ExtractInt16(); ret.FileNameOffset = ExtractInt32(); ret.SourceFileNameIndex = ExtractInt32(); ret.PDBPathIndex = ExtractInt32(); ret.SourceFileName = ExtractTerminatedString(); ret.ObjectFileName = ExtractTerminatedString(); if (ReadOffset - begin < ModuleSubstreamSize.ExtractedValue) { Extract4ByteAlignment(); } var seq = new ByteSequence(FlattenedBuffer, begin, ReadOffset - begin); ret.OriginalSequence = seq; ef.RegisterDBIModuleStream(modi, ret.StreamNumber.ExtractedValue, ret.SymbolSize.ExtractedValue, ret.LineNumberBytes.ExtractedValue, ret.C13LineNumberBytes.ExtractedValue); return(ret); }
private void ParseModules(MSFStreamEntireFile ef) { int modi = 0; int begin = ReadOffset; ModulesBeginOffset = begin; while (ReadOffset - begin < ModuleSubstreamSize.ExtractedValue) { var mod = ParseSingleModule(modi, ef); Mods.Add(mod); ++modi; } }
public MSFStreamDBI(int streamindex, byte[] entirefile, int streamsize, List <int> blocks, int blocksize, MSFStreamEntireFile ef) : base(streamindex, entirefile, streamsize, blocks, blocksize) { Mods = new List <Mod>(); Contributions = new List <SectionContribution>(); ParseHeaders(); ParseModules(ef); ParseSectionContributions(); // TODO //ParseSectionMap(); //ParseFiles(); ef.RegisterDBIStreams(GlobalsStreamIndex.ExtractedValue, PublicsStreamIndex.ExtractedValue, SymbolsStreamIndex.ExtractedValue); }
public MSF(string filename) { EntireFile = new MSFStreamEntireFile(File.ReadAllBytes(filename)); EntireFile.Name = "(Entire file)"; }