コード例 #1
0
ファイル: Header.cs プロジェクト: revel8n/rpftool
 public void Read(BigEndianBinaryReader br)
 {
     Identifier = (HeaderIDs)br.ReadInt32();
     EntryCount = br.ReadInt32();
     TOCSize = EntryCount * 20;
     Unknown1 = br.ReadInt32();
     EncryptedFlag = br.ReadInt32();
 }
コード例 #2
0
 public override void Read(BigEndianBinaryReader br, int extra = 0)
 {
     NameOffset = br.ReadInt32();
     Flags = br.ReadInt32();
     ContentEntryIndex = (int)(br.ReadUInt32() & 0x7fffffff);
     ContentEntryCount = br.ReadInt32() & 0x0fffffff;
     UNKNOWN = br.ReadInt32();
 }
コード例 #3
0
ファイル: Header.cs プロジェクト: revel8n/rpftool
        public void Read(BigEndianBinaryReader br)
        {
            Identifier = (HeaderIDs)br.ReadInt32();
            EntryCount = br.ReadInt32();
            TOCSize = EntryCount * 16;

            BitsStream stream = new BitsStream(br.BaseStream);
            stream.Position = 8;
            stream.ReadBits(1);
            nameShift = (int)stream.ReadBits(3);
            namesLength = (int)stream.ReadBits(28);
            br.BaseStream.Position = 12;

            EncryptedFlag = br.ReadInt32();
        }
コード例 #4
0
ファイル: xscView.cs プロジェクト: revel8n/rpftool
 private ArrayList getNatives(BigEndianBinaryReader reader)
 {
     long returnpos = reader.BaseStream.Position + 4;
     reader.BaseStream.Position = (reader.ReadInt32() & 0xFFFFFF);
     ArrayList Natives = new ArrayList();
     for (int i = 0; i < m_dwNativeSize; i++)
     {
         Natives.Add(reader.ReadInt32());
     }
     reader.BaseStream.Position = returnpos;
     return Natives;
 }
コード例 #5
0
ファイル: xscView.cs プロジェクト: revel8n/rpftool
 private ArrayList getStatics(BigEndianBinaryReader reader)
 {
     long returnpos = reader.BaseStream.Position + 4;
     reader.BaseStream.Position = (reader.ReadInt32() & 0xFFFFFF);
     ArrayList statics = new ArrayList();
     for (int i = 0; i < m_dwStaticSize; i++)
     {
         statics.Add(reader.ReadInt32());
     }
     reader.BaseStream.Position = returnpos;
     return statics;
 }
コード例 #6
0
ファイル: xscView.cs プロジェクト: revel8n/rpftool
 private int[] getPages(BigEndianBinaryReader reader, int offset)
 {
     reader.BaseStream.Position = offset;
     int[] pages = new int[(m_dwCodeSize + (1 << 14) - 1) >> 14];
     for (int i = 0; i < pages.Length; i++)
     {
         pages[i] = reader.ReadInt32() & 0xFFFFFF;
     }
     return pages;
 }
コード例 #7
0
ファイル: xscView.cs プロジェクト: revel8n/rpftool
 private int readPPByte(BigEndianBinaryReader reader)
 {
     long returnpos = reader.BaseStream.Position + 4;
     reader.BaseStream.Position = (reader.ReadInt32() & 0xFFFFFF);
     reader.BaseStream.Position = (reader.ReadInt32() & 0xFFFFFF);
     int val = reader.ReadByte();
     reader.BaseStream.Position = returnpos;
     return val;
 }
コード例 #8
0
ファイル: xscView.cs プロジェクト: revel8n/rpftool
        public StringBuilder Decode()
        {
            StringBuilder log = new StringBuilder();
            MemoryStream ms = new MemoryStream(data);
            using (BigEndianBinaryReader reader = new BigEndianBinaryReader(ms))
            {
                try
                {
                    ////////////////////
                    //Find Header
                    ////////////////////
                    bool valid;
                    try
                    {
                        valid = false;
                        dwClassOffset = 0;
                        reader.BaseStream.Position = 0;
                        while (dwClassOffset < reader.BaseStream.Length)
                        {
                            if (reader.ReadInt32() == -1462287616) //0x43D7A8
                            {
                                valid = true;
                                break;
                            }
                            dwClassOffset += 4096;
                            reader.BaseStream.Position = dwClassOffset;
                        }
                        reader.BaseStream.Position = 0;
                    }
                    catch (System.Exception ex)
                    {
                        log.AppendLine("Error: Failed to Find Header");
                        return log;
                    }
                    log.AppendLine(string.Format("TRACE: length = {0}, valid = {1}, offset = 0x{2:X}\n", reader.BaseStream.Length, valid ? "true" : "false", dwClassOffset));
                    if (!valid)
                    {
                        log.AppendLine("Error: Invalid XSC File");
                        return log;
                    }

                    ////////////////////
                    //Read Header
                    ////////////////////
                    try
                    {
                        reader.BaseStream.Position = dwClassOffset + 4;
                        this.m_pPageMap = reader.ReadInt32();
                        int temp_codePagesOffset = (reader.ReadInt32() & 0xFFFFFF); // Just get pages offset until we have code size
                        this.m_dwCodeSize = reader.ReadInt32();
                        this._f10 = reader.ReadInt32();
                        this.m_dwStaticSize = reader.ReadInt32();
                        this.m_pStatic = getStatics(reader);
                        this.m_dwGlobalsVersion = reader.ReadInt32();
                        this.m_dwNativeSize = reader.ReadInt32();
                        this.m_ppNatives = getNatives(reader);

                        this.m_ppCodePages = getPages(reader, temp_codePagesOffset); // go back and get pages
                        for (int i = 0; i < m_ppCodePages.Length; i++)
                        {
                            log.AppendLine(string.Format("TRACE: page {0:d}: offset = {1:X}\n", i, m_ppCodePages[i]));
                        }
                        lb_natives.Items.AddRange(this.m_ppNatives.ToArray());
                        lb_locals.Items.AddRange(this.m_pStatic.ToArray());
                    }
                    catch
                    {
                        log.AppendLine("Error: Failed reading Header");
                        return log;
                    }

                    ////////////////////
                    //Read opcodes
                    ////////////////////
                    try
                    {
                        page = 0;
                        reader.BaseStream.Position = m_ppCodePages[0];
                        StringBuilder script = new StringBuilder();
                        for (int i = 0; i < m_dwCodeSize; i = disassembleCommand(reader, i, script)) ;
                        codeBox.Text = script.ToString();
                    }
                    catch
                    {
                        log.AppendLine("Error: Failed reading opcodes");
                        return log;
                    }
                }
                catch
                {
                    log.AppendLine("Error: Failed reading XSC file");
                    return log;
                }
                return log;
            }
        }
コード例 #9
0
ファイル: FileEntry.cs プロジェクト: reditec/RDR-Explorer
        public override void Read(BigEndianBinaryReader br, int extra = 0)
        {
            try
            {
                NameOffset = br.ReadInt32();
                SizeInArchive = br.ReadInt32();
                Offset = br.ReadInt32();
                Flags1 = br.ReadInt32();
                Flags2 = br.ReadInt32();
                //int test = (int)(Flags1 & 0x80000000);
                //string bits1 = GetIntBinaryString(Flags1);
                IsResourceFile = (Flags1 & 0x80000000) == 0x80000000;
                IsCompressed = (Flags1 & 0x40000000) == 0x40000000;
                DecompressedSize = (int)(Flags1 & 0xbfffffff);

                if (IsResourceFile)
                {
                    //Flags2 = (int)swap32(Flags2);
                    ResourceType = (byte)(Offset & 0xFF);
                    Offset = (Offset & 0x7fffff00) * 8;
                    dwExtVSize = (int)(Flags2 & 0x7FFF);
                    dwExtPSize = (int)((Flags2 & 0xFFF7000) >> 14);
                    _f14_30 = (int)(Flags2 & 0x70000000);
                    bUseExtSize = (Flags2 & 0x80000000) == 0x80000000 ? true : false;
                    DecompressedSize = (int)(getSizeV() + getSizeP());
                    if (Offset % 2048 != 0)
                    {
                        Debug.Print("Invalid Resource Offset");
                    }
                }
                else
                    Offset = Offset * 8;

                /////////////////////////
                // Couple of debug checks
                /////////////////////////
                /*
                #if DEBUG
                {
                    if (IsResourceFile)
                    {
                        if (Offset % 2048 != 0)
                        {
                            Debug.Print("Invalid Resource Offset");
                        }
                        string bits = GetIntBinaryString(Flags2);
                        int SizeV = getSizeV();
                        int SizeP = getSizeP();
                        int objectStart = getObjectStart();
                    }
                    else
                    {
                        if (Offset % 8 != 0)
                        {
                            Debug.Print("Invalid File Offset");
                        }
                    }
                }
                #endif
                 */

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
コード例 #10
0
ファイル: RSC.cs プロジェクト: revel8n/rpftool
            public bool bUseExtSize; //: 1;

            public bool ReadHeader(BigEndianBinaryReader reader)
            {
                try
                {
                    this.m_dwMagic = reader.ReadInt32();
                    switch (m_dwMagic)
                    {
                        case -2059185326:
                            this.m_dwVersion = reader.ReadInt32();
                            this.m_dwFlags1 = reader.ReadInt32();
                            this.m_dwFlags2 = reader.ReadInt32();
                            dwExtVSize = (int)(m_dwFlags2 & 0x7FFF);
                            dwExtPSize = (int)((m_dwFlags2 & 0xFFF7000) >> 14);
                            _f14_30 = (int)(m_dwFlags2 & 0x70000000);
                            bUseExtSize = (m_dwFlags2 & 0x80000000) == 0x80000000 ? true : false;
                            return true;
                        case 88298322:
                            this.m_dwVersion = reader.ReadInt32();
                            this.m_dwFlags1 = reader.ReadInt32();
                            //dwExtVSize = (int)(m_dwFlags2 & 0x7FFF);
                            //dwExtPSize = (int)((m_dwFlags2 & 0xFFF7000) >> 14);
                            //_f14_30 = (int)(m_dwFlags2 & 0x70000000);
                            bUseExtSize = false;
                            return true;
                        default:
                            return false;
                    }
                }
                catch (Exception ex) { return false; }
            }