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);
        }
        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 PprRecursiveStructs()
        {
            StructureType s1 = new StructureType(null, 0, true);
            StructureType s2 = new StructureType(null, 0, true);

            s1.Fields.Add(0, new Pointer(s2, 4));
            s2.Fields.Add(0, new Pointer(s1, 4));

            var program = new Program();
            var factory = new TypeFactory();
            var store   = new TypeStore();

            var ppr = new PtrPrimitiveReplacer(factory, store, program);

            var sExp = "(struct (0 (ptr (struct (0 (ptr (struct)) ptr0000))) ptr0000))";

            Assert.AreEqual(sExp, ppr.Replace(s1).ToString());
            Assert.AreEqual(sExp, ppr.Replace(s2).ToString());
        }
        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");
        }
Exemple #5
0
        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);
        }