Esempio n. 1
0
        static void ExtractSERI(BinaryReader Reader,
                                string OutputFile,
                                uint StringTableOffset,
                                uint StringPointersOffset,
                                uint SERIOffset)
        {
            SERI Output = new SERI();

            Reader.BaseStream.Seek(SERIOffset, SeekOrigin.Begin);

            string SERISignature    = ReadString(Reader, 4);
            uint   ValuesOffset     = SERIOffset + Reader.ReadUInt32() + 4;
            ushort ParametersCount  = Reader.ReadUInt16();
            uint   TypesTableOffset = ValuesOffset - ParametersCount;

            for (int Index = 0; Index < ParametersCount; Index++)
            {
                Reader.BaseStream.Seek(SERIOffset + 0xa + Index * 4, SeekOrigin.Begin);
                ushort NameOffset  = Reader.ReadUInt16();
                ushort ValueOffset = Reader.ReadUInt16();
                string Name        = ReadNullTerminatedString(Reader, StringTableOffset + NameOffset);

                Reader.BaseStream.Seek(TypesTableOffset + Index, SeekOrigin.Begin);
                char ValueType = Reader.ReadChar();

                Output.Add(ParseSERI(Reader,
                                     StringTableOffset,
                                     StringPointersOffset,
                                     ValuesOffset,
                                     ValueOffset,
                                     ValueType,
                                     Name));
            }

            XmlSerializer Serializer = new XmlSerializer(typeof(SERI));

            using (FileStream OutFile = new FileStream(OutputFile + ".xml", FileMode.Create))
            {
                Serializer.Serialize(OutFile, Output);
            }
        }
Esempio n. 2
0
        static void ExtractSERI(BinaryReader Reader,
            string OutputFile,
            uint StringTableOffset, 
            uint StringPointersOffset,
            uint SERIOffset)
        {
            SERI Output = new SERI();
            Reader.BaseStream.Seek(SERIOffset, SeekOrigin.Begin);

            string SERISignature = ReadString(Reader, 4);
            uint ValuesOffset = SERIOffset + Reader.ReadUInt32() + 4;
            ushort ParametersCount = Reader.ReadUInt16();
            uint TypesTableOffset = ValuesOffset - ParametersCount;

            for (int Index = 0; Index < ParametersCount; Index++)
            {
                Reader.BaseStream.Seek(SERIOffset + 0xa + Index * 4, SeekOrigin.Begin);
                ushort NameOffset = Reader.ReadUInt16();
                ushort ValueOffset = Reader.ReadUInt16();
                string Name = ReadNullTerminatedString(Reader, StringTableOffset + NameOffset);

                Reader.BaseStream.Seek(TypesTableOffset + Index, SeekOrigin.Begin);
                char ValueType = Reader.ReadChar();

                Output.Add(ParseSERI(Reader,
                    StringTableOffset,
                    StringPointersOffset,
                    ValuesOffset,
                    ValueOffset,
                    ValueType,
                    Name));
            }

            XmlSerializer Serializer = new XmlSerializer(typeof(SERI));
            using (FileStream OutFile = new FileStream(OutputFile + ".xml", FileMode.Create))
            {
                Serializer.Serialize(OutFile, Output);
            }
        }