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); }
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); }
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); }
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)); }
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()); }
public void Setup() { this.platform = new MacOSClassic(null, new M68kArchitecture("m68k")); this.tlib = new TypeLibrary(); }
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; }