Esempio n. 1
0
        private void Given_Relocator()
        {
            var sc       = new ServiceContainer();
            var arch     = new M68kArchitecture(sc, "m68k");
            var platform = new MacOSClassic(sc, arch)
            {
                A5World  = a5world,
                A5Offset = 2048,
            };
            var rdr = new BeImageReader(platform.A5World.MemoryArea, 0);

            this.relocator = new A5Relocator(platform, rdr, 1024);
        }
Esempio n. 2
0
        private void Given_Relocator()
        {
            var sc       = new ServiceContainer();
            var arch     = new M68kArchitecture(sc, "m68k", new Dictionary <string, object>());
            var platform = new MacOSClassic(sc, arch)
            {
                A5World  = a5world,
                A5Offset = 2048,
            };
            var mem = (ByteMemoryArea)platform.A5World.MemoryArea;
            var rdr = new BeImageReader(mem, 0);

            this.relocator = new A5Relocator(platform, rdr, 1024);
        }
Esempio n. 3
0
        public void ReadHeader()
        {
            var sc    = new ServiceContainer();
            var arch  = new M68kArchitecture(sc, "m68k", new Dictionary <string, object>());
            var macOS = new MacOSClassic(sc, arch);

            MemoryStream stm = new MemoryStream();

            WriteBeUint32(stm, 0x00000010);
            WriteBeUint32(stm, 0x00000020);
            WriteBeUint32(stm, 0x00000010);
            WriteBeUint32(stm, 0x00000010);

            stm.Write(Encoding.ASCII.GetBytes("Hello world!Hello world!"), 0, 0x10);

            stm.Write(new byte[0x10], 0, 0x10);  // copy of header
            WriteBeUint32(stm, 0);               // next resource map.
            WriteBeUint16(stm, 0);
            WriteBeUint16(stm, 0);
            WriteBeUint16(stm, 0x1C);
            WriteBeUint16(stm, 0);
            WriteBeUint16(stm, 0);

            WriteAsciiString(stm, "CODE");      // 001E: type list
            WriteBeUint16(stm, 0);
            WriteBeUint16(stm, 8);

            WriteBeUint16(stm, 0);             // resource ID
            WriteBeUint16(stm, 0x0C);
            stm.WriteByte(0);
            stm.WriteByte(0);
            stm.WriteByte(0);
            stm.WriteByte(0x10);
            WriteBeUint32(stm, 0);

            stm.WriteByte(4);
            WriteAsciiString(stm, "Test");

            ResourceFork rsrc = new ResourceFork(macOS, stm.GetBuffer());

            Assert.AreEqual(1, rsrc.ResourceTypes.Count);
            IEnumerator <ResourceFork.ResourceType> ert = rsrc.ResourceTypes.GetEnumerator();

            Assert.IsTrue(ert.MoveNext());
            ResourceFork.ResourceType rt = ert.Current;
            Assert.AreEqual("CODE", rt.Name);
            Assert.AreEqual(1, rt.References.Count);
        }
Esempio n. 4
0
        public override Program Load(Address addrLoad)
        {
            BinHexDecoder      dec = new BinHexDecoder(new StringReader(Encoding.ASCII.GetString(RawImage)));
            IEnumerator <byte> stm = dec.GetBytes().GetEnumerator();
            BinHexHeader       hdr = LoadBinHexHeader(stm);

            byte[] dataFork = LoadFork(hdr.DataForkLength, stm);
            byte[] rsrcFork = LoadFork(hdr.ResourceForkLength, stm);

            var arch     = new M68kArchitecture();
            var platform = new MacOSClassic(Services, arch);

            if (hdr.FileType == "PACT")
            {
                Cpt.CompactProArchive        archive = new Cpt.CompactProArchive();
                List <ArchiveDirectoryEntry> items   = archive.Load(new MemoryStream(dataFork));
                IArchiveBrowserService       abSvc   = Services.GetService <IArchiveBrowserService>();
                if (abSvc != null)
                {
                    var selectedFile = abSvc.UserSelectFileFromArchive(items);
                    if (selectedFile != null)
                    {
                        var image = selectedFile.GetBytes();
                        this.rsrcFork   = new ResourceFork(image, arch);
                        this.mem        = new MemoryArea(addrLoad, image);
                        this.segmentMap = new SegmentMap(addrLoad,
                                                         new ImageSegment("", mem, AccessMode.ReadWriteExecute));
                        return(new Program(this.segmentMap, arch, platform));
                    }
                }
            }

            this.mem = new MemoryArea(addrLoad, dataFork);
            return(new Program(
                       new SegmentMap(mem.BaseAddress,
                                      new ImageSegment("", mem, AccessMode.ReadWriteExecute)),
                       arch,
                       platform));
        }
Esempio n. 5
0
        public void MacOS_ResolveIndirectCall()
        {
            var macOS = new MacOSClassic(null, new M68kArchitecture("m68k"));
            var a5    = new Identifier(Registers.a5.Name, Registers.a5.DataType, Registers.a5);

            var a5world = new MemoryArea(Address.Ptr32(0x00100000), new byte[0x0300]);

            macOS.A5World  = new ImageSegment("A5World", a5world, AccessMode.ReadWrite);
            macOS.A5Offset = 0x0100u;
            const int  jumpTableOffset = 0x0032;
            const uint uAddrDirect     = 0x00123400u;
            var        w = new BeImageWriter(a5world, macOS.A5Offset + jumpTableOffset);

            w.WriteBeUInt16(0x4EF9);        // jmp... (not really necessary for the test but hey....);
            w.WriteBeUInt32(uAddrDirect);

            var m     = new RtlEmitter(null);
            var instr = new RtlCall(m.IAdd(a5, jumpTableOffset), 4, RtlClass.Call);
            var addr  = macOS.ResolveIndirectCall(instr);

            Assert.AreEqual(uAddrDirect, addr.ToUInt32());
        }
Esempio n. 6
0
 public void Setup()
 {
     this.platform = new MacOSClassic(null, new M68kArchitecture("m68k"));
     this.tlib     = new TypeLibrary();
 }
Esempio n. 7
0
 public CompactProArchive(ImageLocation archiveLocation, IProcessorArchitecture arch, MacOSClassic platform)
 {
     this.Location     = archiveLocation;
     this.Architecture = arch;
     this.Platform     = platform;
     this.RootEntries  = new List <ArchiveDirectoryEntry>();
     this.updcrc       = zip_updcrc;
 }