The default platform is used when a specific platform cannot be determined.
"All the world's a VAX" -- not Henry Spencer
Inheritance: Platform
Exemplo n.º 1
0
 public void Setup()
 {
     factory = new TypeFactory();
     store = new TypeStore();
     eqb = new EquivalenceClassBuilder(factory, store);
     var platform = new DefaultPlatform(null, new FakeArchitecture());
     dtb = new DataTypeBuilder(factory, store, platform);
 }
 public void Setup()
 {
     this.m = new ExpressionEmitter();
     this.store = new TypeStore();
     this.factory = new TypeFactory();
     var arch = new FakeArchitecture();
     var platform = new DefaultPlatform(null, arch);
     this.exa = new ExpressionTypeAscender(platform, store, factory);
 }
 public void Oee_LoadPlatform_NoHeuristics()
 {
     var element = new OperatingEnvironmentElement
     {
     };
     var platform = new DefaultPlatform(null, null);
     element.LoadSettingsFromConfiguration(null, platform);
     Assert.IsNotNull(platform.Heuristics);
     Assert.IsNotNull(platform.Heuristics.ProcedurePrologs);
     Assert.AreEqual(0, platform.Heuristics.ProcedurePrologs.Length);
 }
Exemplo n.º 4
0
 private void RunFileTestx86_32(string relativePath, string outputFile)
 {
     Program program;
     var sc = new ServiceContainer();
     var fsSvc = new FileSystemServiceImpl();
     var el = new FakeDecompilerEventListener();
     sc.AddService<IFileSystemService>(fsSvc);
     sc.AddService<DecompilerEventListener>(el);
     var arch = new X86ArchitectureFlat32();
     var asm = new X86TextAssembler(sc, arch);
     using (var rdr = new StreamReader(FileUnitTester.MapTestPath(relativePath)))
     {
         var platform = new DefaultPlatform(sc, arch);
         asm.Platform = platform;
         program = asm.Assemble(Address.Ptr32(0x10000000), rdr);
     }
     var scanner = new Scanner(program, new Dictionary<Address, ProcedureSignature>(), null, sc);
     scanner.EnqueueEntryPoint(new EntryPoint(program.Image.BaseAddress, arch.CreateProcessorState()));
     scanner.ScanImage();
     using (var fut = new FileUnitTester(outputFile))
     {
         foreach (var proc in program.Procedures.Values)
         {
             proc.Write(false, fut.TextWriter);
         }
         fut.AssertFilesEqual();
     }
 }
Exemplo n.º 5
0
        public void Scanner_EvenOdd()
        {
            var scan = CreateScanner(0x1000, 0x2000);
            var platform = new DefaultPlatform(null, program.Architecture);
            program.Platform = platform;
            fakeArch.Test_AddTraces(RtlEvenOdd.Create(fakeArch));

            var proc = scan.ScanProcedure(
                Address.Ptr32(0x1000),
                "fn1000",
                arch.CreateProcessorState());
            var sExp = @"// fn1000
// Return size: 4
void fn1000()
fn1000_entry:
l00001000:
	r63 = fp
	r1 = 0x00000003
	r63 = r63 - 0x00000004
	Mem0[r63:word32] = r1
	call fn00001200 (retsize: 4;)
	r63 = r63 + 0x00000008
	r1 = 0x00000003
	r63 = r63 - 0x00000004
	Mem0[r63:word32] = r1
	call fn00001100 (retsize: 4;)
	r63 = r63 + 0x00000008
	return
fn1000_exit:

// fn00001100
// Return size: 0
void fn00001100()
fn00001100_entry:
l00001100:
	r63 = fp
	r1 = Mem0[r63 + 0x00000004:word32]
	branch r1 == 0x00000000 l00001120
	goto l00001108
l00001100:
l00001108:
	r1 = Mem0[r63 + 0x00000004:word32]
	r1 = r1 - 0x00000001
	Mem0[r63 + 0x00000004:word32] = r1
l00001114_thunk_fn00001200:
	call fn00001200 (retsize: 0;)
	return
l00001120:
	r1 = 0x00000000
	return
fn00001100_exit:

// fn00001200
// Return size: 0
void fn00001200()
fn00001200_entry:
l00001200:
	r63 = fp
	r1 = Mem0[r63 + 0x00000004:word32]
	branch r1 == 0x00000000 l00001220
l00001208:
	r1 = Mem0[r63 + 0x00000004:word32]
	r1 = r1 - 0x00000001
	Mem0[r63 + 0x00000004:word32] = r1
l00001214_thunk_fn00001100:
	call fn00001100 (retsize: 0;)
	return
l00001220:
	r1 = 0x00000001
	return
fn00001200_exit:

";
            AssertProgram(sExp, program);
        }
Exemplo n.º 6
0
        private void Build(Procedure proc, IProcessorArchitecture arch)
        {
            var platform = new DefaultPlatform(null, arch);
            this.proc = proc;
            Aliases alias = new Aliases(proc, arch);
            alias.Transform();
            SsaTransform sst = new SsaTransform(new ProgramDataFlow(), proc, proc.CreateBlockDominatorGraph());
            ssa = sst.SsaState;
            ConditionCodeEliminator cce = new ConditionCodeEliminator(ssa.Identifiers, platform);
            cce.Transform();
            ValuePropagator vp = new ValuePropagator(arch, ssa.Identifiers, proc);
            vp.Transform();
            DeadCode.Eliminate(proc, ssa);
            Coalescer coa = new Coalescer(proc, ssa);
            coa.Transform();
            DeadCode.Eliminate(proc, ssa);

            sla = new SsaLivenessAnalysis(proc, ssa.Identifiers);
            sla2 = new SsaLivenessAnalysis2(proc, ssa.Identifiers);
            sla2.Analyze();
        }
Exemplo n.º 7
0
 void RunTest(string c_code, string expectedXml)
 {
     StringReader reader = null;
     StringWriter writer = null;
     try
     {
         reader = new StringReader(c_code);
         writer = new StringWriter();
         var xWriter = new XmlnsHidingWriter(writer)
         {
             Formatting = Formatting.Indented
         };
         var arch = new FakeArchitecture();
         var platform = new DefaultPlatform(null, arch);
         var xc = new XmlConverter(reader, xWriter, platform);
         xc.Convert();
         writer.Flush();
         Assert.AreEqual(expectedXml, writer.ToString());
     }
     catch
     {
         Debug.WriteLine(writer.ToString());
         throw;
     }
     finally
     {
         if (writer != null)
             writer.Dispose();
         if (reader != null)
             reader.Dispose();
     }
 }
Exemplo n.º 8
0
 public Platform CreatePlatform(byte osAbi)
 {
     DefaultPlatform defaultPlatform;
     var dcSvc = Services.RequireService<IConfigurationService>();
     switch (osAbi)
     {
     case ELFOSABI_NONE: // Unspecified ABI
         defaultPlatform = new DefaultPlatform(Services, arch);
         defaultPlatform.TypeLibraries.AddRange(LoadTypeLibraries());
         return defaultPlatform;
     case ELFOSABI_CELL_LV2: // PS/3
         //$TODO: I know nothing about that platform, so use
         // defaults. If you think you know better, and you think
         // the platform differs by a significant amount, 
         // implement a PS/3 platform and use it here.
         var env = dcSvc.GetEnvironment("elf-cell-lv2");
         var platform = env.Load(Services, arch);
         return platform;
     default:
         throw new NotSupportedException(string.Format("Unsupported ELF ABI 0x{0:X2}.", osAbi));
     }
 }
Exemplo n.º 9
0
        private void DecompileRawImage(DecompilerDriver dec, Dictionary<string, object> pArgs)
        {
            var arch = config.GetArchitecture((string)pArgs["--arch"]);
            if (arch == null)
                throw new ApplicationException(string.Format("Unknown architecture {0}", pArgs["--arch"]));

            object sEnv;
            Platform platform;
            if (pArgs.TryGetValue("--env", out sEnv))
            {
                var opEnv = config.GetEnvironment((string)sEnv);
                if (opEnv == null)
                    throw new ApplicationException(string.Format("Unknown operating environment {0}", sEnv));
                platform = opEnv.Load(services, arch);
            }
            else
            {
                platform = new DefaultPlatform(services, arch);
            }

            Address addrBase;
            Address addrEntry;
            if (!arch.TryParseAddress((string)pArgs["--base"], out addrBase))
                throw new ApplicationException(string.Format("'{0}' doesn't appear to be a valid address.", pArgs["--base"]));
            if (pArgs.ContainsKey("--entry"))
            {
                if (!arch.TryParseAddress((string)pArgs["--base"], out addrEntry))
                    throw new ApplicationException(string.Format("'{0}' doesn't appear to be a valid address.", pArgs["--base"]));
            }
            else
                addrEntry = addrBase;


            var state = CreateInitialState(arch, pArgs);
            dec.LoadRawImage((string)pArgs["filename"], arch, platform, addrBase);
            dec.Project.Programs[0].EntryPoints.Add(new EntryPoint(addrEntry, state));
            dec.ScanPrograms();
            dec.AnalyzeDataFlow();
            dec.ReconstructTypes();
            dec.StructureProgram();
            dec.WriteDecompilerProducts();
        }
Exemplo n.º 10
0
        public void EIL_LoadCellLv2()
        {
            var opEl = mr.Stub<OperatingEnvironment>();
            var platform = new DefaultPlatform(sc, arch);
            cfgSvc.Stub(d => d.GetEnvironment("elf-cell-lv2")).Return(opEl);
            opEl.Expect(o => o.Load(null, null)).IgnoreArguments().Return(platform);
            mr.ReplayAll();
            
            var eil = new ElfImageLoader(sc, "foo", rawImg);
            eil.LoadElfIdentification();
            var el = eil.CreateLoader();
            el.LoadPlatform(0x66, arch);        // ELFOSABI_CELL_LV2;

            mr.VerifyAll();
        }
Exemplo n.º 11
0
 private void Given_VaScanner(IProcessorArchitecture arch)
 {
     var platform = new DefaultPlatform(null, arch);
     var segmentMap = CreateSegmentMap(0, 128);
     this.program = new Program(segmentMap, arch, platform);
     this.vafs = CreateVaScanner(program);
 }
Exemplo n.º 12
0
		private void Build(Procedure proc, IProcessorArchitecture arch)
		{
            var platform = new DefaultPlatform(null, arch);
			this.proc = proc;
            var importResolver = MockRepository.GenerateStub<IImportResolver>();
            importResolver.Replay();
            Aliases alias = new Aliases(proc, arch);
			alias.Transform();
			var gr = proc.CreateBlockDominatorGraph();
			SsaTransform sst = new SsaTransform(
                new ProgramDataFlow(),
                proc,
                null,
                gr,
                new HashSet<RegisterStorage>());
			SsaState ssa = sst.SsaState;
			this.ssaIds = ssa.Identifiers;

			ConditionCodeEliminator cce = new ConditionCodeEliminator(ssa, platform);
			cce.Transform();
			DeadCode.Eliminate(proc, ssa);

			ValuePropagator vp = new ValuePropagator(arch, ssa);
			vp.Transform();

			Coalescer coa = new Coalescer(proc, ssa);
			coa.Transform();

			DeadCode.Eliminate(proc, ssa);
		}