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