public void Read(BigEndianBinaryReader br) { Identifier = (HeaderIDs)br.ReadInt32(); EntryCount = br.ReadInt32(); TOCSize = EntryCount * 20; Unknown1 = br.ReadInt32(); EncryptedFlag = br.ReadInt32(); }
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(); }
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(); }
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; }
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; }
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; }
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; }
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; } }
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); } }
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; } }