Exemple #1
0
        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();
        }
Exemple #2
0
        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();
        }