Exemplo n.º 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));
                }
            }
Exemplo n.º 2
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();
            }
        }
Exemplo n.º 3
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);
 }
Exemplo n.º 4
0
 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;
     }
 }
Exemplo n.º 5
0
        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);
            }
        }
Exemplo n.º 6
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);
            }