Esempio n. 1
0
        protected override void RunTest(Program prog, TextWriter writer)
        {
            var flow           = new ProgramDataFlow(prog);
            var eventListener  = new FakeDecompilerEventListener();
            var importResolver = MockRepository.GenerateStub <IImportResolver>();

            importResolver.Replay();
            var trf = new TrashedRegisterFinder(prog, prog.Procedures.Values, flow, eventListener);

            trf.Compute();
            trf.RewriteBasicBlocks();
            Dump(prog.CallGraph);
            RegisterLiveness.Compute(prog, flow, eventListener);
            GlobalCallRewriter.Rewrite(prog, flow, eventListener);

            foreach (Procedure proc in prog.Procedures.Values)
            {
                Aliases alias = new Aliases(proc, prog.Architecture);
                alias.Transform();
                var          gr  = proc.CreateBlockDominatorGraph();
                SsaTransform sst = new SsaTransform(
                    flow,
                    proc,
                    importResolver,
                    gr,
                    new HashSet <RegisterStorage>());
                ssa = sst.SsaState;
                ssa.Write(writer);
                proc.Write(false, true, writer);
                writer.WriteLine();
                ssa.CheckUses(s => Assert.Fail(s));
            }
        }
Esempio n. 2
0
        protected override void RunTest(Program prog, TextWriter writer)
        {
            var flow          = new ProgramDataFlow(prog);
            var eventListener = new FakeDecompilerEventListener();
            var trf           = new TrashedRegisterFinder(prog, prog.Procedures.Values, flow, eventListener);

            trf.Compute();
            trf.RewriteBasicBlocks();
            Dump(prog.CallGraph);
            var rl = RegisterLiveness.Compute(prog, flow, eventListener);

            GlobalCallRewriter.Rewrite(prog, flow);

            foreach (Procedure proc in prog.Procedures.Values)
            {
                Aliases alias = new Aliases(proc, prog.Architecture);
                alias.Transform();
                var          gr  = proc.CreateBlockDominatorGraph();
                SsaTransform sst = new SsaTransform(flow, proc, gr);
                ssa = sst.SsaState;
                ssa.Write(writer);
                proc.Write(false, true, writer);
                writer.WriteLine();
            }
        }
Esempio n. 3
0
 public void Setup()
 {
     program = new Program();
     program.Architecture = new X86ArchitectureFlat32();
     program.Platform     = new DefaultPlatform(null, program.Architecture);
     gcr  = new GlobalCallRewriter(program, null);
     proc = new Procedure("foo", program.Architecture.CreateFrame());
     flow = new ProcedureFlow(proc, program.Architecture);
 }
 public void Setup()
 {
     program = new Program();
     program.Architecture = new X86ArchitectureFlat32("x86-protected-32");
     program.Platform     = new DefaultPlatform(null, program.Architecture);
     gcr  = new GlobalCallRewriter(program, null, new FakeDecompilerEventListener());
     proc = new Procedure("foo", program.Architecture.CreateFrame());
     flow = new ProcedureFlow(proc, program.Architecture);
 }
Esempio n. 5
0
        public void GcrStackArguments()
        {
            Frame f = program.Architecture.CreateFrame();

            f.ReturnAddressKnown = true;
            f.ReturnAddressSize  = PrimitiveType.Word16.Size;

            f.EnsureStackVariable(Constant.Word16(8), 2, PrimitiveType.Word16);
            f.EnsureStackVariable(Constant.Word16(6), 2, PrimitiveType.Word16);
            f.EnsureStackVariable(Constant.Word16(0x0E), 2, PrimitiveType.Word32);

            GlobalCallRewriter gcr = new GlobalCallRewriter(null, null);

            using (FileUnitTester fut = new FileUnitTester("Analysis/GcrStackParameters.txt"))
            {
                foreach (KeyValuePair <int, Identifier> de in gcr.GetSortedStackArguments(f))
                {
                    fut.TextWriter.Write("{0:X4} ", de.Key);
                    de.Value.Write(true, fut.TextWriter);
                    fut.TextWriter.WriteLine();
                }
                fut.AssertFilesEqual();
            }
        }