public void Setup() { m = new ProcedureBuilder(arch); frame = m.Frame; ax = frame.EnsureRegister(new RegisterStorage("ax", 0, 0, PrimitiveType.Word16)); bx = frame.EnsureRegister(new RegisterStorage("bx", 3, 0, PrimitiveType.Word16)); cx = frame.EnsureRegister(new RegisterStorage("cx", 1, 0, PrimitiveType.Word16)); dx = frame.EnsureRegister(new RegisterStorage("dx", 2, 0, PrimitiveType.Word16)); flags = new FlagRegister("flags", 4, PrimitiveType.Word16); SCZ = frame.EnsureFlagGroup(flags, 7, "SCZ", PrimitiveType.Byte); CF = frame.EnsureFlagGroup(flags, arch.CarryFlagMask, "C", PrimitiveType.Bool); rw = new LongAddRewriter(m.Procedure, arch); }
public void Setup() { m = new ProcedureBuilder(arch); frame = m.Frame; ax = frame.EnsureRegister(new RegisterStorage("ax", 0, PrimitiveType.Word16)); bx = frame.EnsureRegister(new RegisterStorage("bx", 3, PrimitiveType.Word16)); cx = frame.EnsureRegister(new RegisterStorage("cx", 1, PrimitiveType.Word16)); dx = frame.EnsureRegister(new RegisterStorage("dx", 2, PrimitiveType.Word16)); SCZ = frame.EnsureFlagGroup(7, "SCZ", PrimitiveType.Byte); CF = frame.EnsureFlagGroup(arch.CarryFlagMask, "C", PrimitiveType.Bool); rw = new LongAddRewriter(m.Procedure, arch); Procedure proc = new Procedure("test", frame); block = new Block(proc, "bloke"); }
protected override void RunTest(Program program, TextWriter writer) { var dynamicLinker = new Mock <IDynamicLinker>().Object; var listener = new FakeDecompilerEventListener(); var sc = new ServiceContainer(); sc.AddService <DecompilerEventListener>(listener); var dfa = new DataFlowAnalysis(program, dynamicLinker, sc); foreach (var proc in program.Procedures.Values) { var sst = new SsaTransform( program, proc, new HashSet <Procedure>(), dynamicLinker, new ProgramDataFlow()); var ssa = sst.Transform(); var larw = new LongAddRewriter(ssa, listener); larw.Transform(); var cce = new ConditionCodeEliminator(program, ssa, listener); cce.Transform(); ssa.Validate(s => { ssa.Dump(true); Assert.Fail(s); }); var vp = new ValuePropagator(program.SegmentMap, ssa, program.CallGraph, dynamicLinker, listener); vp.Transform(); ssa.Validate(s => { ssa.Dump(true); Assert.Fail(s); }); sst.RenameFrameAccesses = true; sst.Transform(); ssa.Validate(s => { ssa.Dump(true); Assert.Fail(s); }); // We don't add uses to exit block on purpose. We // are not testing interprocedural effects here. DeadCode.Eliminate(ssa); ssa.Procedure.Write(false, writer); writer.WriteLine(); ssa.Validate(s => { ssa.Dump(true); Assert.Fail(s); }); } }
protected override void RunTest(Program prog, TextWriter writer) { var eventListener = new FakeDecompilerEventListener(); var dfa = new DataFlowAnalysis(prog, null, eventListener); var trf = new TrashedRegisterFinder(prog, prog.Procedures.Values, dfa.ProgramDataFlow, eventListener); trf.Compute(); trf.RewriteBasicBlocks(); RegisterLiveness rl = RegisterLiveness.Compute(prog, dfa.ProgramDataFlow, eventListener); foreach (Procedure proc in prog.Procedures.Values) { LongAddRewriter larw = new LongAddRewriter(proc, prog.Architecture); larw.Transform(); proc.Write(false, writer); writer.WriteLine(); } }
private void RunTest(Action <ProcedureBuilder> builder) { builder(m); var dynamicLinker = new Mock <IDynamicLinker>(); var sst = new SsaTransform( program, m.Procedure, new HashSet <Procedure>(), dynamicLinker.Object, new ProgramDataFlow()); sst.Transform(); sst.RenameFrameAccesses = true; sst.Transform(); sst.AddUsesToExitBlock(); sst.RemoveDeadSsaIdentifiers(); rw = new LongAddRewriter(sst.SsaState, new FakeDecompilerEventListener()); this.ssa = sst.SsaState; }
private void RunTest(Action <ProcedureBuilder> builder) { builder(m); var importResolver = new Mock <IImportResolver>(); var sst = new SsaTransform( program, m.Procedure, new HashSet <Procedure>(), importResolver.Object, new ProgramDataFlow()); sst.Transform(); sst.RenameFrameAccesses = true; sst.Transform(); sst.AddUsesToExitBlock(); sst.RemoveDeadSsaIdentifiers(); rw = new LongAddRewriter(sst.SsaState); this.ssa = sst.SsaState; }