public MemorySection(ARM.Section info, string name, byte[] data)
 {
     this.info = info;
     this.name = name;
     this.data = data;
     Rename();
 }
Esempio n. 2
0
            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());
            }