예제 #1
0
        public void loadO2CirDataFile(String sFileToLoad, bool raiseProcessNewDataLoad, bool decompileCodeIfNoPdb)
        {
            try
            {
                if (false == File.Exists(sFileToLoad))
                {
                    DI.log.error("File to load doesnt exists: {0}", sFileToLoad);
                }
                else
                {
                    CirDataAnalysisUtils.loadFileIntoCirDataAnalysisObject(sFileToLoad, cirDataAnalysis, decompileCodeIfNoPdb);

                    if (raiseProcessNewDataLoad)
                    {
                        raiseSetCirDataAnalysisO2Message();
                    }
                    else
                    {
                        updateCirDataStats();
                    }
                }
            }
            catch (Exception ex)
            {
                DI.log.error("in loadO2CirDataFile: {0}", ex.Message);
            }
        }
예제 #2
0
 private void raiseSetCirDataAnalysisO2Message()
 {
     //setO2CirDataAnalysisObject(cirDataAnalysis);
     CirDataAnalysisUtils.remapIsCalledByXrefs(cirDataAnalysis);                 // this is called when everything has been added, so it is the best place to remap the ISCalledBy XRefs
     O2Messages.setCirDataAnalysis(cirDataAnalysis);
     updateCirDataStats();
 }
예제 #3
0
 public CirDataAnalysis()
 {
     CirDataAnalysisUtils.clear(this);
     onlyShowFunctionsWithCallersOrCallees           = false;
     onlyShowFunctionsOrClassesWithControlFlowGraphs = true;         // default to true;
     onlyShowExternalFunctionsThatAreInvokedFromCFG  = false;
 }
        public static void viewClassMethods(ascx_FunctionsViewer targetFunctionsViewer, ICirClass targetClass, bool showInheritedMethods, bool ignoreCoreObjectClass)
        {
            if (targetClass != null)
            {
                O2Thread.mtaThread(
                    () =>
                {
                    targetFunctionsViewer.clearLoadedSignatures();
                    targetFunctionsViewer.setNamespaceDepth(0);
                    var signaturesToShow = new List <string>();
                    if (showInheritedMethods)
                    {
                        List <ICirFunction> inheritedSignatures = CirDataAnalysisUtils.getListOfInheritedMethods(targetClass, ignoreCoreObjectClass);
                        foreach (var inheritedSignature in inheritedSignatures)
                        {
                            signaturesToShow.Add(inheritedSignature.FunctionSignature);
                        }
                    }
                    else
                    {
                        signaturesToShow.AddRange(targetClass.dFunctions.Keys.ToList());
                    }

                    targetFunctionsViewer.showSignatures(signaturesToShow);

                    /*var thread = targetFunctionsViewer.showSignatures(signaturesToShow);
                     * if (thread != null)
                     * {
                     *  thread.Join();
                     *  targetFunctionsViewer.expandNodes();
                     * } */
                });
            }
        }
예제 #5
0
        public bool Save(string savedCirDataFile)
        {
            Files.deleteFile(savedCirDataFile);
            var timer = new O2Timer("Saving CirData").start();

            CirDataAnalysisUtils.saveCirDataAnalysisObjectAsCirDataFile(this, savedCirDataFile);
            timer.stop();
            return(File.Exists(savedCirDataFile));
        }
 public ICirDataAnalysis loadCirData(ICirData cirDataToLoad, bool clearLoadedData)
 {
     if (clearLoadedData)
     {
         deleteAllLoadedData();
     }
     CirDataAnalysisUtils.addO2CirDataFile(cirDataAnalysis, cirDataToLoad);
     return(cirDataAnalysis);
 }
        public void loadFiles(IEnumerable <string> filesToLoad, bool showNotSupportedExtensionError, bool useCachedVersionIfAvailable, bool remapXrefs, bool decompileCodeIfNoPdb)
        {
            foreach (var fileToLoad in filesToLoad)
            {
                CirDataAnalysisUtils.loadFileIntoCirDataAnalysisObject(fileToLoad, cirDataAnalysis, showNotSupportedExtensionError, useCachedVersionIfAvailable, false /*runRemapXrefs*/, decompileCodeIfNoPdb); // since we are loading multiple files never run the remap on file load
            }
            if (remapXrefs)
            {
                CirDataAnalysisUtils.remapXrefs(cirDataAnalysis);
            }

            updateCirDataStats();
        }
예제 #8
0
        private ICirData createCirData(List <string> filesToProcess)
        {
            var cirDataAnalysis = new CirDataAnalysis();

            foreach (var fileToProcess in filesToProcess)
            {
                if (fileToProcess != "" && Path.GetExtension(fileToProcess) == ".xml")
                {
                    var tempCirData = CirFactory.createCirDataFromXmlFileWithJavaMetadata(fileToProcess);
                    CirDataAnalysisUtils.addO2CirDataFile(cirDataAnalysis, tempCirData, false /* runRemapXrefs*/);
                }
            }
            CirDataAnalysisUtils.remapXrefs(cirDataAnalysis);
            CirViewingUtils.openCirDataFileInCirViewerControl(cirDataAnalysis, "Cir Viewer");
            return(CirDataAnalysisUtils.createCirDataFromCirDataAnalysis(cirDataAnalysis));
        }
예제 #9
0
 void o2MessageQueue_onMessages(IO2Message o2Message)
 {
     if (o2Message is IM_CirAction)
     {
         var cirAction = (IM_CirAction)o2Message;
         switch (cirAction.CirAction)
         {
         case IM_CirActions.setCirData:
             CirDataAnalysisUtils.addO2CirDataFile(cirDataAnalysis, cirAction.CirData);
             raiseSetCirDataAnalysisO2Message();
             //O2Messages.setCirDataAnalysis(cirDataAnalysis);
             //DI.cirData = cirAction.CirData;
             //updateCirDataStats();
             break;
         }
     }
 }
        public void loadO2CirDataFile(String sFileToLoad, bool useCachedVersionIfAvailable)
        {
            if (sFileToLoad.IndexOf(".CirData") > -1 || CirLoad.isFileACirDumpFile(sFileToLoad))
            {
                //CirDataAnalysis fdaO2CirDataAnalysis;
                if (cbClearPreviousO2CirData.Checked)
                {
                    cdaO2CirDataAnalysis = new CirDataAnalysis();
                }
                CirDataAnalysisUtils.addO2CirDataFile(cdaO2CirDataAnalysis, sFileToLoad, useCachedVersionIfAvailable);
                lbCirFileLoaded.Text = "";
                foreach (String sLoadedO2CirData in cdaO2CirDataAnalysis.dCirDataFilesLoaded.Keys)
                {
                    lbCirFileLoaded.Text += Path.GetFileName(sLoadedO2CirData);
                }

                btFindClassesWithNoControlFlowGraphs_Click(null, null);
            }
        }
        void o2MessageQueue_onMessages(IO2Message o2Message)
        {
            if (o2Message is IM_CirAction)
            {
                var cirAction = (IM_CirAction)o2Message;
                switch (cirAction.CirAction)
                {
                case IM_CirActions.setCirDataAnalysis:
                    loadCirDataAnalysisObject(cirAction.CirDataAnalysis);
                    updateCirDataStats();
                    break;

                case IM_CirActions.setCirData:      // if there was a CirData file set, then add it into CirDataAnalysis
                    CirDataAnalysisUtils.addO2CirDataFile(cirDataAnalysis, cirAction.CirData);
                    updateCirDataStats();
                    break;
                }
            }
        }
예제 #12
0
 public void LoadClassInfo()
 {
     if (this.okThread(delegate { LoadClassInfo(); }))
     {
         ICirDataSearchResult fcdSearchResult = CirDataAnalysisUtils.executeSearch(cirDataAnalysis);
         if (cbOnlyShowClassesWithFunctionsWithControlFlowGraphs.Checked)
         {
             afv_Classes.showSignatures(fcdSearchResult.lsResult_Classes_WithControlFlowGraphs);
         }
         else
         {
             afv_Classes.showSignatures(fcdSearchResult.lsResult_Classes);
         }
         if (cbCalculateSuperClasses.Checked)
         {
             //afv_Classes.showSignatures(fcdSearchResult.lsResult_Classes);
             afv_SuperClasses.iMaxItemsToShow = 10000;
             afv_SuperClasses.showSignatures(cirDataAnalysis.lCirClass_bySuperClass);
         }
     }
     //  classNodeCheckClickEvent(new List<String>());       // this will clear all previous results;
 }
        /// <summary>
        /// use this to make sure all main dictionaires are syncronized
        /// </summary>
        public void remapXRefs()
        {
            var tempCirDataAnalysis = new CirDataAnalysis(this);

            try
            {
                foreach (var cirClass in dClasses_bySignature.Values)
                {
                    foreach (var cirFunction in cirClass.dFunctions.Values)
                    {
                        if (false == dFunctions_bySignature.ContainsKey(cirFunction.FunctionSignature))
                        {
                            dFunctions_bySignature.Add(cirFunction.FunctionSignature, cirFunction);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                O2.Kernel.PublicDI.log.error("in remapXRefs: {0}", ex.Message);
            }
            CirDataAnalysisUtils.remapIsCalledByXrefs(tempCirDataAnalysis);
        }
 public ICirData getCirDataObject()
 {
     return(CirDataAnalysisUtils.createCirDataFromCirDataAnalysis(cirDataAnalysis));
 }
 public void loadFile(string sFileToLoad, bool showNotSupportedExtensionError, bool useCachedVersionIfAvailable, bool remapXrefs, bool decompileCodeIfNoPdb)
 {
     CirDataAnalysisUtils.loadFileIntoCirDataAnalysisObject(sFileToLoad, cirDataAnalysis, showNotSupportedExtensionError, useCachedVersionIfAvailable, remapXrefs, decompileCodeIfNoPdb);   // load file
     updateCirDataStats();
 }
예제 #16
0
 public CirDataAnalysis(ICirData cirData) : this()
 {
     CirDataAnalysisUtils.addO2CirDataFile(this, cirData);
 }
예제 #17
0
        public void test_PopulateCirWithTraces()
        {
            // get Assessment Data
            var o2Assessment = new O2Assessment(new O2AssessmentLoad_OunceV6(), findingsFile);

            Assert.That(o2Assessment.o2Findings.Count > 0, "There were no findings in o2Assessment");
            DI.log.info("There are {0} findings in the assessment loaded", o2Assessment.o2Findings.Count);
            var uniqueListOfSignatures = OzasmtUtils.getUniqueListOfSignatures(o2Assessment.o2Findings);

            Assert.That(uniqueListOfSignatures.Count() > 0, "uniqueListOfSignatures.Count ==0 ");
            DI.log.info("There are {0} unique signatures ", uniqueListOfSignatures.Count());

            // get cir data
            var cirDataAnalysis = new CirDataAnalysis();

            CirDataAnalysisUtils.loadFileIntoCirDataAnalysisObject(fileToCreateCirFrom, cirDataAnalysis);
            CirDataAnalysisUtils.remapIsCalledByXrefs(cirDataAnalysis);

            Assert.That(cirDataAnalysis.dCirFunction_bySignature.Count > 0, "cirDataAnalysis.dCirFunction_bySignature.Count == 0");

            // need to convert to Ozasmt signature format
            var cirMappedFunctions = new Dictionary <string, ICirFunction>();

            foreach (var cirFunction in cirDataAnalysis.dCirFunction_bySignature.Values)
            {
                if (cirFunction.FunctionSignature.IndexOf("O2AppDomainFactory>") > -1)
                {
                }
                var filteredSignature = new FilteredSignature(cirFunction);
                cirMappedFunctions.Add(filteredSignature.sSignature, cirFunction);
            }
            var matches = new List <String>();

            foreach (var sig in cirMappedFunctions.Keys)
            {
                if (sig.IndexOf("IndexOf") > -1)
                {
                    matches.Add(sig);
                }
            }

            //var matches = new List<String>();

            /*     foreach (var cirFunction in cirMappedFunctions.Values)
             *       foreach (var called in cirFunction.FunctionsCalledUniqueList)
             *           if (called.FunctionSignature.IndexOf("System.Object::.ctor") > -1)
             *           {
             *               matches.Add(called.FunctionSignature);
             *               var asd = cirDataAnalysis.dCirFunction_bySignature.ContainsKey(called.FunctionSignature);
             *           }*/


            foreach (var signature in uniqueListOfSignatures)
            {
                if (false == cirMappedFunctions.ContainsKey(signature))
                {
                    DI.log.info("NO MATCH:" + signature);
                }
            }

            foreach (O2Finding o2Finding in o2Assessment.o2Findings)
            {
                var source = o2Finding.Sink;
                if (source != "" && false == cirMappedFunctions.ContainsKey(source))
                {
                    DI.log.info("NO MATCH for Source:" + source);
                }

                var sink = o2Finding.Sink;
                if (sink != "" && false == cirMappedFunctions.ContainsKey(sink))
                {
                    DI.log.info("NO MATCH for Sink:" + sink);
                }
            }

            /*foreach (var signature in uniqueListOfSignatures)
             *  DI.log.info(signature);
             * return;*/
        }