예제 #1
0
        static void Main(string[] args)
        {
            var inputDll   = args[0];
            var outputPath = args[1];
            var logPath    = args[2];

            AnalyzeScopeScript(args);
            AnalysisStats.PrintStats(System.Console.Out);
        }
예제 #2
0
        public static void AnalyzeScopeScripts(string[] args)
        {
            var logPath      = Path.Combine(@"C:\Temp\", "analysis.log");
            var outputStream = File.CreateText(logPath);
            var interProc    = false;


            var          inputFolder  = args[0];
            var          outputFolder = args[1];
            var          kind         = args[2];
            const string inputDllName = "__ScopeCodeGen__.dll";

            string[] files = Directory.GetFiles(inputFolder, inputDllName, SearchOption.AllDirectories);
            foreach (var dllToAnalyze in files)
            {
                System.Console.WriteLine("=========================================================================");
                System.Console.WriteLine("Folder #{0}", AnalysisStats.TotalNumberFolders);
                System.Console.WriteLine("Analyzing {0}", dllToAnalyze);
                outputStream.WriteLine("Folder #{0}", AnalysisStats.TotalNumberFolders);
                outputStream.WriteLine("===========================================================================");
                outputStream.WriteLine("Analyzing {0}", dllToAnalyze);

                var folder = Path.GetDirectoryName(dllToAnalyze);
                //var referencesPath = Directory.GetFiles(folder, "*.dll", SearchOption.TopDirectoryOnly).Where(fp => Path.GetFileName(fp) != inputDllName).ToList();
                //referencesPath.AddRange(Directory.GetFiles(folder, "*.exe", SearchOption.TopDirectoryOnly));
                string[] directories = folder.Split(Path.DirectorySeparatorChar);
                var      outputPath  = Path.Combine(outputFolder, directories.Last()) + "_" + Path.ChangeExtension(Path.GetFileName(dllToAnalyze), ".sarif");

                //var outputPath = Path.Combine(outputFolder, Path.ChangeExtension(Path.GetFileName(dllToAnalyze),".sarif"));

                ScopeProgramAnalysis.Program.AnalyzeDllAndWriteLog(dllToAnalyze, outputPath, ScopeProgramAnalysis.ScopeProgramAnalysis.ScopeMethodKind.All,
                                                                   true, interProc, outputStream);

                if (AnalysisStats.AnalysisReasons.Any())
                {
                    outputStream.WriteLine("Analysis reasons for {0}", dllToAnalyze);
                    AnalysisStats.WriteAnalysisReasons(outputStream);
                }
                outputStream.WriteLine("===========================================================================");
                outputStream.Flush();

                System.Console.WriteLine("=========================================================================");
                //PointsToGraph.NullNode.Variables.Clear();
                //PointsToGraph.NullNode.Targets.Clear();
                //PointsToGraph.NullNode.Sources.Clear();
                //PointsToGraph.GlobalNode.Variables.Clear();
                //PointsToGraph.GlobalNode.Targets.Clear();
                //PointsToGraph.GlobalNode.Sources.Clear();
                AnalysisStats.AnalysisReasons.Clear();
            }

            AnalysisStats.PrintStats(outputStream);
            outputStream.WriteLine("End.");
            outputStream.Flush();

            System.Console.WriteLine("Done!");
        }
예제 #3
0
        public static void AnalyzeScopeScript(string[] args)
        {
            var inputDll     = args[0];
            var outputFolder = args[1];
            var tempPath     = outputFolder;

            var interproc = false;

            var dllToAnalyze = inputDll;

            var folder = Path.GetDirectoryName(dllToAnalyze);

            string[] directories = folder.Split(Path.DirectorySeparatorChar);

            var logPath = Path.Combine(tempPath, directories.Last()) + "_" + Path.ChangeExtension(Path.GetFileName(dllToAnalyze), ".log");

            var outputStream = File.CreateText(logPath);

            //var referencesPath = Directory.GetFiles(folder, "*.dll", SearchOption.TopDirectoryOnly).Where(fp => Path.GetFileName(fp) != inputDllName).ToList();
            //referencesPath.AddRange(Directory.GetFiles(folder, "*.exe", SearchOption.TopDirectoryOnly));

            var outputPath = Path.Combine(outputFolder, directories.Last()) + "_" + Path.ChangeExtension(Path.GetFileName(dllToAnalyze), ".sarif");

            System.Console.WriteLine("=========================================================================");
            System.Console.WriteLine("Folder #{0}", AnalysisStats.TotalNumberFolders);
            System.Console.WriteLine("Analyzing {0}", dllToAnalyze);
            outputStream.WriteLine("Folder #{0}", AnalysisStats.TotalNumberFolders);
            outputStream.WriteLine("===========================================================================");
            outputStream.WriteLine("Analyzing {0}", dllToAnalyze);


            ScopeProgramAnalysis.ScopeProgramAnalysis.AnalyzeDllAndWriteLog(dllToAnalyze, outputPath, ScopeProgramAnalysis.ScopeProgramAnalysis.ScopeMethodKind.All, true, interproc, outputStream);

            if (AnalysisStats.AnalysisReasons.Any())
            {
                outputStream.WriteLine("Analysis reasons for {0}", dllToAnalyze);
                AnalysisStats.WriteAnalysisReasons(outputStream);
            }
            outputStream.WriteLine("===========================================================================");
            outputStream.Flush();

            System.Console.WriteLine("=========================================================================");


            AnalysisStats.PrintStats(outputStream);
            outputStream.WriteLine("End.");
            outputStream.Flush();

            System.Console.WriteLine("Done!");
        }