示例#1
0
        ///<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.");
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        ///<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.");
        }
示例#6
0
        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);
        }
示例#7
0
        ///<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.");
        }