public MemorySection(ARM.Section info, string name, byte[] data) { this.info = info; this.name = name; this.data = data; Rename(); }
public MemorySection[] GetARM7BinarySection() { // find memory section address ARM7StartModuleParamsOffset = (uint)FindARM7StartModuleParams(); long pos = ARM7StartModuleParamsOffset; if (pos < 0) { throw new Exception("Couldn't find the '_start_ModuleParams' table for the ARM7 processor"); } List <MemorySection> sections = new List <MemorySection>(); BinaryReader arm7 = new BinaryReader(new MemoryStream(ARM7.Data)); uint ramBase = ARM7.Info.ramAddress; arm7.BaseStream.Seek(pos, SeekOrigin.Begin); uint tableBegin = arm7.ReadUInt32() - ramBase; uint tableEnd = arm7.ReadUInt32() - ramBase; uint dataOffset = arm7.ReadUInt32() - ramBase; arm7.BaseStream.Seek(0, SeekOrigin.Begin); byte[] baseData = arm7.ReadBytes((int)dataOffset); sections.Add(new MemorySection(ramBase, dataOffset, 0, "arm7_0", baseData)); int i = 1; int secCount = (int)(tableEnd - tableBegin) / 12; Status.InitProgress(); Status.SetMaxProgress(secCount); while (tableBegin < tableEnd) { Status.SetStatusText(string.Format("Reading ARM7 sections [{0:d}/{1:d}]", i, secCount)); arm7.BaseStream.Seek(tableBegin, SeekOrigin.Begin); byte[] raw = arm7.ReadBytes(12); ARM.Section sec = Util.ConvertToStruct <ARM.Section>(raw, 12); arm7.BaseStream.Seek(dataOffset, SeekOrigin.Begin); byte[] data = arm7.ReadBytes((int)sec.size); tableBegin += 12; dataOffset += sec.size; sections.Add(new MemorySection(sec, string.Format("arm7_{0:d}", i++), data)); Status.IncrementProgress(); } Status.FillProgress(); return(sections.ToArray()); }