///<summary> /// Determines the signature of the procedures, /// the locations and types of all the values in the program. ///</summary> public virtual void AnalyzeDataFlow() { if (project is null) { return; } var eventListener = services.RequireService <DecompilerEventListener>(); foreach (var program in project.Programs) { if (eventListener.IsCanceled()) { return; } var ir = new DynamicLinker(project, program, eventListener); var dfa = new DataFlowAnalysis(program, ir, services); dfa.ClearTestFiles(); if (program.NeedsSsaTransform) { eventListener.ShowStatus("Performing interprocedural analysis."); dfa.UntangleProcedures(); } eventListener.ShowStatus("Building complex expressions."); dfa.BuildExpressionTrees(); host.WriteIntermediateCode(program, (name, procs, writer) => { EmitProgram(program, procs, dfa, name, writer); }); } eventListener.ShowStatus("Interprocedural analysis complete."); }
protected void RunTest(ProgramBuilder mock, string outputFile) { Program prog = mock.BuildProgram(); DataFlowAnalysis dfa = new DataFlowAnalysis(prog, new FakeDecompilerEventListener()); dfa.DumpProgram(); dfa.BuildExpressionTrees(); RunTest(prog, outputFile); }
protected void RunTest(ProgramBuilder mock, string outputFile) { Program program = mock.BuildProgram(); var importResolver = new Mock <IImportResolver>(); DataFlowAnalysis dfa = new DataFlowAnalysis(program, importResolver.Object, new FakeDecompilerEventListener()); dfa.UntangleProcedures(); dfa.BuildExpressionTrees(); RunTest(program, outputFile); }
protected void RunTest(ProgramBuilder mock, string outputFile) { Program program = mock.BuildProgram(); var importResolver = MockRepository.GenerateStub <IImportResolver>(); DataFlowAnalysis dfa = new DataFlowAnalysis(program, importResolver, new FakeDecompilerEventListener()); dfa.DumpProgram(); dfa.BuildExpressionTrees(); RunTest(program, outputFile); }
///<summary> /// Determines the signature of the procedures, /// the locations and types of all the values in the program. ///</summary> public virtual void AnalyzeDataFlow() { foreach (var program in project.Programs) { eventListener.ShowStatus("Performing interprocedural analysis."); var dfa = new DataFlowAnalysis(program, eventListener); dfa.UntangleProcedures(); dfa.BuildExpressionTrees(); host.WriteIntermediateCode(program, writer => { EmitProgram(program, dfa, writer); }); } eventListener.ShowStatus("Interprocedural analysis complete."); }
protected void RunTest(ProgramBuilder mock, string outputFile) { var sc = new ServiceContainer(); PopulateServiceContainer(sc); Program program = mock.BuildProgram(); var dynamicLinker = new Mock <IDynamicLinker>(); DataFlowAnalysis dfa = new DataFlowAnalysis(program, dynamicLinker.Object, sc); dfa.UntangleProcedures(); dfa.BuildExpressionTrees(); RunTest(program, outputFile); }
///<summary> /// Determines the signature of the procedures, /// the locations and types of all the values in the program. ///</summary> public virtual void AnalyzeDataFlow() { var eventListener = services.RequireService <DecompilerEventListener>(); foreach (var program in project.Programs) { eventListener.ShowStatus("Performing interprocedural analysis."); var ir = new ImportResolver(project, program, eventListener); var dfa = new DataFlowAnalysis(program, ir, eventListener); dfa.UntangleProcedures(); dfa.BuildExpressionTrees(); host.WriteIntermediateCode(program, writer => { EmitProgram(program, dfa, writer); }); } eventListener.ShowStatus("Interprocedural analysis complete."); }