Inheritance: Reko.Core.ProcessorArchitecture
示例#1
0
 public OperandRewriter(M68kArchitecture arch, RtlEmitter emitter, Frame frame, PrimitiveType dataWidth)
 {
     this.arch      = arch;
     this.m         = emitter;
     this.frame     = frame;
     this.DataWidth = dataWidth;
 }
示例#2
0
文件: M68kState.cs 项目: nemerle/reko
 public M68kState(M68kState orig)
     : base(orig)
 {
     this.arch = orig.arch;
     this.values = (uint[]) orig.values.Clone();
     this.isValid = (bool[]) orig.isValid.Clone();
 }
示例#3
0
 public void Setup()
 {
     this.mr = new MockRepository();
     this.fsSvc = mr.StrictMock<IFileSystemService>();
     this.tllSvc = mr.Stub<ITypeLibraryLoaderService>();
     this.services = mr.StrictMock<IServiceProvider>();
     var cfgSvc = mr.Stub<IConfigurationService>();
     var env = mr.Stub<OperatingEnvironment>();
     this.arch = new M68kArchitecture();
     this.rtls = new List<RtlInstruction>();
     this.m = new RtlEmitter(rtls);
     cfgSvc.Stub(c => c.GetEnvironment("amigaOS")).Return(env);
     env.Stub(e => e.TypeLibraries).Return(new List<ITypeLibraryElement>());
     env.Stub(e => e.CharacteristicsLibraries).Return(new List<ITypeLibraryElement>());
     env.Stub(e => e.Options).Return(new Dictionary<string, object>
     {
         { "versionDependentLibraries", new Dictionary<string,object>
             {
                 { "33", new List<object> { "exec_v33", "dos_v33" } },
                 { "34", new List<object> { "exec_v34", "dos_v34" } },
             }
         }
     });
     this.services.Stub(s => s.GetService(typeof(IConfigurationService))).Return(cfgSvc);
     this.services.Stub(s => s.GetService(typeof(IFileSystemService))).Return(fsSvc);
     this.services.Stub(s => s.GetService(typeof(ITypeLibraryLoaderService))).Return(tllSvc);
     this.frame = new Frame(arch.FramePointerType);
 }
示例#4
0
 public OperandRewriter(M68kArchitecture arch, RtlEmitter emitter, Frame frame, PrimitiveType dataWidth)
 {
     this.arch = arch;
     this.m = emitter;
     this.frame = frame;
     this.DataWidth = dataWidth;
 }
示例#5
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.image = new LoadedImage(addrLoad, image);
                        this.imageMap = new ImageMap(addrLoad, image.Length);
                        return new Program(this.image, this.imageMap, arch, platform);
                    }
                }
            }

            var li = new LoadedImage(addrLoad, dataFork);
            return new Program(li, li.CreateImageMap(), arch, platform);
        }
示例#6
0
 public OperandRewriter(M68kArchitecture arch, RtlEmitter emitter, IStorageBinder binder, PrimitiveType dataWidth)
 {
     this.arch      = arch;
     this.m         = emitter;
     this.binder    = binder;
     this.DataWidth = dataWidth;
 }
示例#7
0
        public void Sgrom_LoadImage()
        {
            var sc = new ServiceContainer();
            var cfgSvc = mr.Stub<IConfigurationService>();
            var openv = mr.Stub<OperatingEnvironment>();
            var diagSvc = mr.StrictMock<IDiagnosticsService>();
            var arch = new M68kArchitecture();
            var platform = new SegaGenesisPlatform(sc, arch);
            cfgSvc.Expect(c => c.GetArchitecture("m68k")).Return(arch);
            cfgSvc.Expect(c => c.GetEnvironment("sega-genesis")).Return(openv);
            openv.Expect(o => o.Load(sc, arch)).Return(platform);
            sc.AddService<IConfigurationService>(cfgSvc);
            sc.AddService<IDiagnosticsService>(diagSvc);
            Given_AbsoluteMemoryMap(platform);
            mr.ReplayAll();

            var rawBytes = new byte[0x300];
            var sgrom = new RomLoader(sc, "foo.bin", rawBytes);
            var program = sgrom.Load(Address.Ptr32(0));

            var romSegment = program.SegmentMap.Segments.Values.First();
            Assert.IsNotNull(romSegment.MemoryArea, "ROM image should have been loaded into first segment");
            Assert.AreSame(rawBytes, romSegment.MemoryArea.Bytes, "ROM image should have been loaded into first segment");
            Assert.AreEqual(rawBytes.Length, romSegment.ContentSize);
            var ramSegment = program.SegmentMap.Segments.Values.First(s => s.Name == ".data");
            Assert.IsNotNull(ramSegment.MemoryArea, "RAM segment should have a MemoryArea");
        }
示例#8
0
文件: Rewriter.cs 项目: Klanly/reko
 public Rewriter(M68kArchitecture m68kArchitecture, EndianImageReader rdr, M68kState m68kState, IStorageBinder binder, IRewriterHost host)
 {
     this.arch   = m68kArchitecture;
     this.state  = m68kState;
     this.binder = binder;
     this.host   = host;
     this.dasm   = arch.CreateDisassemblerImpl(rdr).GetEnumerator();
 }
示例#9
0
 public Rewriter(M68kArchitecture m68kArchitecture, ImageReader rdr, M68kState m68kState, Frame frame, IRewriterHost host)
 {
     this.arch  = m68kArchitecture;
     this.state = m68kState;
     this.frame = frame;
     this.host  = host;
     this.dasm  = arch.CreateDisassemblerImpl(rdr).GetEnumerator();
 }
示例#10
0
 public M68kAssembler(M68kArchitecture arch, Address addrBase, List<EntryPoint> entryPoints)
 {
     this.arch = arch;
     this.BaseAddress = addrBase;
     this.entryPoints = new List<EntryPoint>();
     this.Emitter = new Emitter();
     this.constants = new List<ushort>();
     this.Symbols = new SymbolTable();
 }
示例#11
0
 public void Setup()
 {
     this.mr = new MockRepository();
     this.fsSvc = mr.StrictMock<IFileSystemService>();
     this.services = mr.StrictMock<IServiceProvider>();
     this.arch = new M68kArchitecture();
     this.rtls = new List<RtlInstruction>();
     this.m = new RtlEmitter(rtls);
     this.services.Stub(s => s.GetService(typeof(IFileSystemService))).Return(fsSvc);
     this.frame = new Frame(arch.FramePointerType);
 }
示例#12
0
 public void Ahl_ParseSimpleDef_voidfn()
 {
     var arch = new M68kArchitecture();
     var platform = new AmigaOSPlatform(null, arch);
     var ahl = new AmigaHeaderLoader(null, "", Encoding.UTF8.GetBytes(
         "[[reko::amiga_function_vector(ExecLibrary, -432)]]  " +
         "void  FrabDevice([[reko::arg(register, \"A1\")]] struct Device * device);"));
     var Q = ahl.Load(platform, new TypeLibrary());
     var svc = ahl.SystemServices[-432];
     Assert.IsInstanceOf<VoidType>(svc.Signature.ReturnValue.DataType);
 }
示例#13
0
 private void BuildTest32(Address addrBase, params byte[] bytes)
 {
     arch = new M68kArchitecture();
     var image = new LoadedImage(addrBase, bytes);
     program = new Program(
         image,
         image.CreateImageMap(),
         arch,
         new DefaultPlatform(null, arch));
     RunTest(addrBase);
 }
示例#14
0
 public void Ahl_ParseSimpleDef()
 {
     var arch = new M68kArchitecture();
     var platform = new AmigaOSPlatform(null, arch);
     var ahl = new AmigaHeaderLoader(null, "", Encoding.UTF8.GetBytes(
         "[[reko::amiga_function_vector(ExecLibrary, -432)]] [[reko::returns(register,\"A0\")]] " +
         "void * FlobDevice([[reko::arg(register, \"A1\")]] struct Device * device);"));
     ahl.Load(platform, new TypeLibrary());
     var svc = ahl.SystemServices[-432];
     Assert.AreEqual("a0", svc.Signature.ReturnValue.Storage.ToString());
     Assert.AreEqual("a1", svc.Signature.Parameters[0].Storage.ToString());
 }
示例#15
0
        public override Program Load(Address addrLoad)
        {
            arch = new M68kArchitecture();
            var imgReader = new BeImageReader(RawImage, 0);
            var parse = new HunkFileParser(imgReader, false);
            this.hunkFile = parse.Parse();
            BuildSegments();
            this.firstCodeHunk = parse.FindFirstCodeHunk();
            var image = new LoadedImage(addrLoad, RelocateBytes(addrLoad));

            return new Program(
                image,
                image.CreateImageMap(),
                arch,
                new AmigaOSPlatform(Services, arch));
        }
示例#16
0
        public override Program Load(Address addrLoad)
        {
            var cfgSvc = Services.RequireService<IConfigurationService>();
            arch = (M68kArchitecture) cfgSvc.GetArchitecture("m68k");
            var imgReader = new BeImageReader(RawImage, 0);
            var parse = new HunkFileParser(imgReader, false);
            this.hunkFile = parse.Parse();
            BuildSegments();
            this.firstCodeHunk = parse.FindFirstCodeHunk();
            var image = new LoadedImage(addrLoad, RelocateBytes(addrLoad));

            return new Program(
                image,
                image.CreateImageMap(),
                arch,
                cfgSvc.GetEnvironment("amigaOS").Load(Services, arch));
        }
示例#17
0
 public void Setup()
 {
     this.mr = new MockRepository();
     this.fsSvc = mr.StrictMock<IFileSystemService>();
     this.tllSvc = mr.Stub<ITypeLibraryLoaderService>();
     this.services = mr.StrictMock<IServiceProvider>();
     var cfgSvc = mr.Stub<IConfigurationService>();
     var env = mr.Stub<OperatingEnvironment>();
     this.arch = new M68kArchitecture();
     this.rtls = new List<RtlInstruction>();
     this.m = new RtlEmitter(rtls);
     cfgSvc.Stub(c => c.GetEnvironment("amigaOS")).Return(env);
     env.Stub(e => e.TypeLibraries).Return(new TypeLibraryElementCollection());
     env.CharacteristicsLibraries = new TypeLibraryElementCollection();
     this.services.Stub(s => s.GetService(typeof(IConfigurationService))).Return(cfgSvc);
     this.services.Stub(s => s.GetService(typeof(IFileSystemService))).Return(fsSvc);
     this.services.Stub(s => s.GetService(typeof(ITypeLibraryLoaderService))).Return(tllSvc);
     this.frame = new Frame(arch.FramePointerType);
 }
示例#18
0
 public override Program Load(Address addrLoad)
 {
     var cfgSvc = Services.RequireService<IConfigurationService>();
     arch = (M68kArchitecture) cfgSvc.GetArchitecture("m68k");
     var imgReader = new BeImageReader(RawImage, 0);
     var parse = new HunkFileParser(imgReader, false);
     this.hunkFile = parse.Parse();
     BuildSegments();
     this.firstCodeHunk = parse.FindFirstCodeHunk();
     var platform = cfgSvc.GetEnvironment("amigaOS").Load(Services, arch);
     var imageMap = platform.CreateAbsoluteMemoryMap();
     var mem = new MemoryArea(addrLoad, RelocateBytes(addrLoad));
     return new Program(
         new SegmentMap(
             mem.BaseAddress,
             new ImageSegment(
                 "code", mem, AccessMode.ReadWriteExecute)),
         arch,
         platform);
 }
示例#19
0
 public M68kState(M68kArchitecture arch)
 {
     this.arch    = arch;
     this.values  = new Constant[RegisterCount];
     this.isValid = new bool[RegisterCount];
 }
示例#20
0
文件: M68kState.cs 项目: uxmal/reko
 public M68kState(M68kArchitecture arch)
 {
     this.arch = arch;
     this.values = new Constant[RegisterCount];
     this.isValid = new bool[RegisterCount];
 }
示例#21
0
 public void Setup()
 {
     arch = new M68kArchitecture();
     asm = new M68kAssembler(arch, Address.Ptr32(0x00010000), new List<EntryPoint>());
 }
示例#22
0
 private void BuildTest32(Action<M68kAssembler> asmProg)
 {
     arch = new M68kArchitecture();
     BuildTest(Address.Ptr32(0x00100000), new DefaultPlatform(null, arch), asmProg);
 }
示例#23
0
 public void Setup()
 {
     arch = new M68kArchitecture();
     asm = new M68kAssembler(arch, Address.Ptr32(0x00010000), new List<ImageSymbol>());
 }
示例#24
0
 public void Setup()
 {
     arch = new M68kArchitecture();
     state = new M68kState(arch);
 }
示例#25
0
 public FuncsFileParser(M68kArchitecture arch, TextReader streamReader)
 {
     this.arch = arch;
     this.streamReader = streamReader;
     this.FunctionsByLibBaseOffset = new Dictionary<int, AmigaSystemFunction>();
 }
示例#26
0
 public M68kState(M68kArchitecture arch)
 {
     this.arch = arch;
     this.values = new uint[16];
     this.isValid = new bool[16];
 }
 public M68kProcedureSerializer(M68kArchitecture arch, ISerializedTypeVisitor<DataType> typeLoader, string defaultCc)
     : base(arch, typeLoader, defaultCc)
 {
 }
 public M68kProcedureSerializer(M68kArchitecture arch, ISerializedTypeVisitor <DataType> typeLoader, string defaultCc)
     : base(arch, typeLoader, defaultCc)
 {
 }
示例#29
0
 public M68kState(M68kState orig) : base(orig)
 {
     this.arch    = orig.arch;
     this.values  = (Constant[])orig.values.Clone();
     this.isValid = (bool[])orig.isValid.Clone();
 }
示例#30
0
 public M68kCallingConvention(M68kArchitecture arch)
 {
     this.arch = arch;
 }
示例#31
0
 public void Setup()
 {
     this.arch = new M68kArchitecture();
     this.rw = new Rewriter(this.arch, null, new M68kState(arch), new Frame(arch.FramePointerType), null);
     this.addrInstr = Address.Ptr32(0x0012340C);
 }
示例#32
0
 public M68kState(M68kArchitecture arch)
 {
     this.arch    = arch;
     this.values  = new uint[16];
     this.isValid = new bool[16];
 }