Example #1
0
            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));
                }
            }
Example #2
0
 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);
 }
Example #3
0
 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);
 }
Example #4
0
        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();
            }
        }
Example #5
0
        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);
        }
Example #6
0
        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;
            }
        }
Example #7
0
 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);
 }
Example #8
0
        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));
            }
        }
Example #9
0
            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);
            }