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"); }
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); }