public PDBFile(string filename) { raw = new MemoryStream(File.ReadAllBytes(filename)); raw.Seek(0, 0); string magic = StreamHelper.ReadFixedString(raw, 24); if (magic != "Microsoft C/C++ MSF 7.00") { return; } raw.Seek(0x20, 0); dPageBytes = StreamHelper.ReadU32(raw); dFlagPage = StreamHelper.ReadU32(raw); dFilePages = StreamHelper.ReadU32(raw); dRootBytes = StreamHelper.ReadU32(raw); dReserved = StreamHelper.ReadU32(raw); pAdIndexPages = StreamHelper.ReadU32(raw); raw.Seek(pAdIndexPages * dPageBytes, 0); List <uint> pages = new List <uint>(); uint count = dRootBytes / dPageBytes; if ((dRootBytes / dPageBytes) != 0) { count++; } for (int i = 0; i < count; i++) { uint u = StreamHelper.ReadU32(raw); if (u != 0) { pages.Add(u); } } adIndexPages = pages.ToArray(); Console.WriteLine("Reading root streams..."); ReadRootStreams(); Console.WriteLine("Reading global name table..."); ReadGlobalNameTable(); Console.WriteLine("Reading TPI stream..."); ReadTPIStream(); Console.WriteLine("Reading debug info streams..."); ReadDebugInfoStream(); Console.WriteLine("Reading symbol record streams..."); ReadSymbolRecordStream(); }
public PDBFile(string filename) { raw = new MemoryStream(File.ReadAllBytes(filename)); raw.Seek(0, 0); string magic = StreamHelper.ReadFixedString(raw, 24); if (magic != "Microsoft C/C++ MSF 7.00") { return; } raw.Seek(0x20, 0); dPageBytes = StreamHelper.ReadU32(raw); dFlagPage = StreamHelper.ReadU32(raw); dFilePages = StreamHelper.ReadU32(raw); dRootBytes = StreamHelper.ReadU32(raw); dReserved = StreamHelper.ReadU32(raw); pAdIndexPages = StreamHelper.ReadU32(raw); raw.Seek(pAdIndexPages * dPageBytes, 0); List <uint> pages = new List <uint>(); while (raw.Position < pAdIndexPages * dPageBytes + dRootBytes) { uint u = StreamHelper.ReadU32(raw); if (u != 0) { pages.Add(u); } else { break; } } adIndexPages = pages.ToArray(); ReadRootStreams(); ReadGlobalNameTable(); ReadTPIStream(); ReadDebugInfoStream(); ReadSymbolRecordStream(); }