예제 #1
0
        /// <summary>
        /// Analyses CFG and return PPG generated by forward analysis
        /// </summary>
        /// <param name="entryMethod">Start point CFG of PHP code</param>
        /// <param name="memoryModel">The memory model used for analysis</param>
        /// <returns>PPG generated by forward analysis</returns>
        internal static ProgramPointGraph Analyze(ControlFlowGraph.ControlFlowGraph entryMethod, MemoryModels.MemoryModelFactory memoryModel)
        {
            //ForwardAnalysisBase forwardAnalysis = analysis.CreateAnalysis(entryMethod, memoryModel);
            ForwardAnalysisBase forwardAnalysis = new Weverca.Analysis.ForwardAnalysis(entryMethod, memoryModel);

            forwardAnalysis.Analyse();
            return(forwardAnalysis.ProgramPointGraph);
        }
예제 #2
0
        /// <summary>
        /// Generates CFG and image and stores them into the folder with input file.
        /// Names of generated files is:
        ///     Text CFG representation - fileName.GRAPH_FILE_EXTENSION
        ///     Image CFG representation - fileName.IMAGE_FILE_EXTENSION
        /// </summary>
        /// <param name="fileName">Name of the file.</param>
        static void ProcessFile(string fileName)
        {
            System.Diagnostics.Debug.Assert(File.Exists(fileName));

            Console.WriteLine("Processing file: {0}", fileName);
            Weverca.ControlFlowGraph.ControlFlowGraph cfg = GenerateCFG(fileName);

            if (cfg == null)
            {
                return;
            }

            //Saves CFG representation into the file
            string cfgFileName = fileName + GRAPH_FILE_EXTENSION;

            using (System.IO.StreamWriter file = new System.IO.StreamWriter(cfgFileName))
            {
                file.WriteLine(cfg.getTextRepresentation());
            }

            //Runs the graphviz component
            System.Diagnostics.Process imageMaker = new System.Diagnostics.Process();
            imageMaker.StartInfo.FileName               = TrunkStructure.GRAPHVIZ_PATH;
            imageMaker.StartInfo.Arguments              = "-Tpng " + cfgFileName;
            imageMaker.StartInfo.UseShellExecute        = false;
            imageMaker.StartInfo.RedirectStandardOutput = true;
            imageMaker.StartInfo.RedirectStandardError  = true;
            imageMaker.Start();

            //And writes the generated image into file
            string imageFileName = fileName + IMAGE_FILE_EXTENSION;

            using (System.IO.StreamWriter file = new System.IO.StreamWriter(imageFileName))
            {
                imageMaker.StandardOutput.BaseStream.CopyTo(file.BaseStream);
            }
        }