private void RunTest(Program program, string outputFile) { var listener = new FakeDecompilerEventListener(); EquivalenceClassBuilder eqb = new EquivalenceClassBuilder(factory, store, listener); DataTypeBuilder dtb = new DataTypeBuilder(factory, store, program.Platform); eqb.Build(program); TraitCollector trco = new TraitCollector(factory, store, dtb, program); trco.CollectProgramTraits(program); dtb.BuildEquivalenceClassDataTypes(); var tv = new TypeVariableReplacer(store); tv.ReplaceTypeVariables(); store.CopyClassDataTypesToTypeVariables(); var ppr = new PtrPrimitiveReplacer(factory, store, program); ppr.ReplaceAll(listener); var cpa = new ConstantPointerAnalysis(factory, store, program); cpa.FollowConstantPointers(); Verify(null, outputFile); }
public void TvrReplaceInMem() { var id1 = new Identifier("pptr", PrimitiveType.Word32, null); var id2 = new Identifier("ptr", PrimitiveType.Word32, null); var id3 = new Identifier("v", PrimitiveType.Word32, null); var ass1 = new Assignment(id2, MemLoad(id1, 0, PrimitiveType.Word32)); var ass2 = new Assignment(id3, MemLoad(id2, 0, PrimitiveType.Word32)); eqb.VisitAssignment(ass1); eqb.VisitAssignment(ass2); var prog = new Program(); prog.Architecture = new FakeArchitecture(); prog.Platform = new DefaultPlatform(null, prog.Architecture); trco = new TraitCollector(factory, store, dtb, prog); trco.VisitAssignment(ass1); trco.VisitAssignment(ass2); dtb.BuildEquivalenceClassDataTypes(); var tvr = new TypeVariableReplacer(store); tvr.ReplaceTypeVariables(); Verify("Typing/TvrReplaceInMem.txt"); }
protected override void RunTest(Program prog, string outputFilename) { TypeFactory factory = new TypeFactory(); store = new TypeStore(); EquivalenceClassBuilder eqb = new EquivalenceClassBuilder(factory, store); eqb.Build(prog); DataTypeBuilder dtb = new DataTypeBuilder(factory, store, prog.Platform); TraitCollector trco = new TraitCollector(factory, store, dtb, prog); trco.CollectProgramTraits(prog); dtb.BuildEquivalenceClassDataTypes(); store.CopyClassDataTypesToTypeVariables(); TypeVariableReplacer tvr = new TypeVariableReplacer(store); tvr.ReplaceTypeVariables(); PtrPrimitiveReplacer ppr = new PtrPrimitiveReplacer(factory, store, prog); ppr.ReplaceAll(); Verify(prog, outputFilename); }
protected override void RunTest(Program program, string outputFileName) { ExpressionNormalizer aen = new ExpressionNormalizer(program.Architecture.PointerType); aen.Transform(program); EquivalenceClassBuilder eq = new EquivalenceClassBuilder(factory, store); eq.Build(program); #if OLD DataTypeBuilder dtb = new DataTypeBuilder(factory, store, program.Architecture); TraitCollector coll = new TraitCollector(factory, store, dtb, program); coll.CollectProgramTraits(program); dtb.BuildEquivalenceClassDataTypes(); #else TypeCollector coll = new TypeCollector(factory, store, program); coll.CollectTypes(); store.BuildEquivalenceClassDataTypes(factory); #endif TypeVariableReplacer tvr = new TypeVariableReplacer(store); tvr.ReplaceTypeVariables(); TypeTransformer trans = new TypeTransformer(factory, store, program); trans.Transform(); using (FileUnitTester fut = new FileUnitTester(outputFileName)) { foreach (Procedure proc in program.Procedures.Values) { proc.Write(false, fut.TextWriter); fut.TextWriter.WriteLine(); } store.Write(fut.TextWriter); fut.AssertFilesEqual(); } }
public void SetupPreStages(Program prog) { aen = new ExpressionNormalizer(prog.Platform.PointerType); eqb = new EquivalenceClassBuilder(prog.TypeFactory, prog.TypeStore); dtb = new DataTypeBuilder(prog.TypeFactory, prog.TypeStore, prog.Platform); tvr = new TypeVariableReplacer(prog.TypeStore); trans = new TypeTransformer(prog.TypeFactory, prog.TypeStore, prog); ctn = new ComplexTypeNamer(); }
public void SetupPreStages(Program program) { foreach (var f in userDefinedGlobals) { program.GlobalFields.Fields.Add(f); } aen = new ExpressionNormalizer(program.Platform.PointerType); eqb = new EquivalenceClassBuilder(program.TypeFactory, program.TypeStore); dtb = new DataTypeBuilder(program.TypeFactory, program.TypeStore, program.Platform); tvr = new TypeVariableReplacer(program.TypeStore); trans = new TypeTransformer(program.TypeFactory, program.TypeStore, program); ctn = new ComplexTypeNamer(); }
protected override void RunTest(Program prog, string outputFilename) { eqb.Build(prog); trco = new TraitCollector(factory, store, dtb, prog); trco.CollectProgramTraits(prog); dtb.BuildEquivalenceClassDataTypes(); store.CopyClassDataTypesToTypeVariables(); TypeVariableReplacer tvr = new TypeVariableReplacer(store); tvr.ReplaceTypeVariables(); Verify(outputFilename); }
protected override void RunTest(Program program, string outputFileName) { var listener = new FakeDecompilerEventListener(); ExpressionNormalizer aen = new ExpressionNormalizer(program.Architecture.PointerType); aen.Transform(program); EquivalenceClassBuilder eq = new EquivalenceClassBuilder(factory, store, listener); eq.Build(program); #if OLD DataTypeBuilder dtb = new DataTypeBuilder(factory, store, program.Architecture); TraitCollector coll = new TraitCollector(factory, store, dtb, program); coll.CollectProgramTraits(program); sktore.BuildEquivalenceClassDataTypes(factory); #else TypeCollector coll = new TypeCollector(factory, store, program, listener); coll.CollectTypes(); store.BuildEquivalenceClassDataTypes(factory); #endif TypeVariableReplacer tvr = new TypeVariableReplacer(store); tvr.ReplaceTypeVariables(); Exception theEx = null; try { TypeTransformer trans = new TypeTransformer(factory, store, program); trans.Transform(); } catch (Exception ex) { theEx = ex; } using (FileUnitTester fut = new FileUnitTester(outputFileName)) { if (theEx != null) { fut.TextWriter.WriteLine(theEx.Message); fut.TextWriter.WriteLine(theEx.StackTrace); } foreach (Procedure proc in program.Procedures.Values) { proc.Write(false, fut.TextWriter); fut.TextWriter.WriteLine(); } store.Write(fut.TextWriter); fut.AssertFilesEqual(); } }
public void SetupPreStages(Program program) { var listener = new FakeDecompilerEventListener(); foreach (var f in userDefinedGlobals) { program.GlobalFields.Fields.Add(f); } foreach (var s in imageSegments.Values) { program.SegmentMap.Segments.Add(s.Address, s); } aen = new ExpressionNormalizer(program.Platform.PointerType); eqb = new EquivalenceClassBuilder(program.TypeFactory, program.TypeStore, listener); dtb = new DataTypeBuilder(program.TypeFactory, program.TypeStore, program.Platform); tvr = new TypeVariableReplacer(program.TypeStore); trans = new TypeTransformer(program.TypeFactory, program.TypeStore, program); ctn = new ComplexTypeNamer(); }
public void PprReplaceInts() { var arch = new FakeArchitecture(); var program = new Program { Architecture = arch, Platform = new DefaultPlatform(null, arch) }; TypeFactory factory = new TypeFactory(); store = new TypeStore(); TypeVariable tv1 = store.CreateTypeVariable(factory); TypeVariable tv2 = store.CreateTypeVariable(factory); Assert.IsNotNull(tv1.Class, "Expected store.EnsureTypeVariable to create equivalence class"); Assert.IsNotNull(tv2.Class, "Expected store.EnsureTypeVariable to create equivalence class"); tv1.Class.DataType = PrimitiveType.Word32; tv2.Class.DataType = PrimitiveType.Word16; program.Globals.TypeVariable = store.CreateTypeVariable(factory); program.Globals.DataType = factory.CreateStructureType(); TypeVariable tv3 = store.CreateTypeVariable(factory); Assert.IsNotNull(tv3.Class, "Expected store.EnsureTypeVariable to create equivalence class"); StructureType mem = factory.CreateStructureType(null, 0); mem.Fields.Add(0, tv1); mem.Fields.Add(4, tv2); tv3.Class.DataType = factory.CreatePointer(mem, 4); store.CopyClassDataTypesToTypeVariables(); TypeVariableReplacer tvr = new TypeVariableReplacer(store); tvr.ReplaceTypeVariables(); var ppr = new PtrPrimitiveReplacer(factory, store, program); ppr.ReplaceAll(); Verify(null, "Typing/PprReplaceInts.txt"); }
private void RunTestCore(Program program) { var listener = new FakeDecompilerEventListener(); var aen = new ExpressionNormalizer(program.Architecture.PointerType); aen.Transform(program); var eq = new EquivalenceClassBuilder(factory, store, listener); eq.Build(program); var coll = new TypeCollector(factory, store, program, listener); coll.CollectTypes(); store.BuildEquivalenceClassDataTypes(factory); var tvr = new TypeVariableReplacer(store); tvr.ReplaceTypeVariables(); var trans = new TypeTransformer(factory, store, program); trans.Transform(); }
private void RunTest(Program prog, string outputFile) { EquivalenceClassBuilder eqb = new EquivalenceClassBuilder(factory, store); DataTypeBuilder dtb = new DataTypeBuilder(factory, store, prog.Platform); eqb.Build(prog); TraitCollector trco = new TraitCollector(factory, store, dtb, prog); trco.CollectProgramTraits(prog); dtb.BuildEquivalenceClassDataTypes(); var tv = new TypeVariableReplacer(store); tv.ReplaceTypeVariables(); store.CopyClassDataTypesToTypeVariables(); var ppr = new PtrPrimitiveReplacer(factory, store, prog); ppr.ReplaceAll(); var dpa = new DerivedPointerAnalysis(factory, store, prog); dpa.FollowDerivedPointers(); Verify(null, outputFile); }