public static bool doesControllerFunctionCallFunction(ICirData cirData, SpringMvcController springMcvController, List <string> functionsToSearch, bool recursiveFunctionSearch)
 {
     if (cirData == null)
     {
         return(false);
     }
     if (cirData.dFunctions_bySignature.ContainsKey(springMcvController.JavaClassAndFunction))
     {
         var cirFunction     = cirData.dFunctions_bySignature[springMcvController.JavaClassAndFunction];
         var targetFunctions = recursiveFunctionSearch ? CirSearch.calculateListOfAllFunctionsCalled(cirFunction) : cirFunction.FunctionsCalledUniqueList;
         DI.log.info("{0} called functions in {1}", targetFunctions.Count, cirFunction.FunctionSignature);
         foreach (var calledCirFunction in targetFunctions)
         {
             if (functionsToSearch.Contains(calledCirFunction.FunctionSignature))
             {
                 return(true);
             }
         }
     }
     else
     {
         DI.log.error("could not find function: {0}", springMcvController.JavaClassAndFunction);
     }
     return(false);
 }
        public static List<String> findClassesThatImplementTheSpringMvc(ICirData fadCirData)
        {
            var lResolvedClasses = new List<String>();
            if (fadCirData == null)
            {
                DI.log.error("in findClassesThatImplementTheSpringMvc: CirData object is null");
                return lResolvedClasses;
            }

            var sSpringMvcClass = "org.springframework.web.servlet.mvc";

            var dClassesThatSuperClassSpringMVC = new Dictionary<String, ICirClass>();


            // first find which classes direcly implement a Spring MVC 
            foreach (ICirClass ccCirClass in fadCirData.dClasses_bySignature.Values)
            {
                foreach (String sSuperClass in ccCirClass.dSuperClasses.Keys)
                {
                    String sSuperClassSignature = ccCirClass.dSuperClasses[sSuperClass].Signature;
                    if (sSuperClassSignature.IndexOf(sSpringMvcClass) > -1)
                        // && ccCirClass.sSignature.IndexOf(sBaseClass) > -1)
                    {
                        String sSignatureAndSuperClass = String.Format("{0} <-- {1}", ccCirClass.Signature,
                                                                       ccCirClass.dSuperClasses[sSuperClass].Signature);
                        dClassesThatSuperClassSpringMVC.Add(sSignatureAndSuperClass, ccCirClass);
                        // DI.log.debug("{0} <-- {1}" , ccCirClass.sSignature, ccCirClass.dSuperClasses[sSuperClass].sSignature);									
                    }
                }
            }
            findAllClassesThatSuperClassProvidedList_recursive(dClassesThatSuperClassSpringMVC, lResolvedClasses);
            DI.log.debug("There are {0} classes that implement Spring MVC", lResolvedClasses.Count);
            return lResolvedClasses;
            // DI.log.debug("Loaded with {0} classes", fadCirData.dClasses_bySignature.Keys.Count);		
        }
Ejemplo n.º 3
0
        public void Test_LoadingAssembly(ICirData cirData, string assemblyToLoad, bool verify, bool verbose)
        {
            AssemblyDefinition assemblyDefinition = CecilUtils.getAssembly(assemblyToLoad);

            if (assemblyDefinition == null)
            {
                return;
            }

            var loadTimer = new O2Timer("Assembly " + Path.GetFileName(assemblyToLoad) + " Loaded in");

            if (verbose)
            {
                loadTimer.start();
            }
            cirFactory.processAssemblyDefinition(cirData, assemblyDefinition, assemblyToLoad);
            if (verbose)
            {
                loadTimer.stop();
            }
            if (verify)
            {
                var checkTimer = new O2Timer("       functions checked in  ");
                if (verbose)
                {
                    checkTimer.start();
                }
                checkThatAllFunctionsMatch(cirData, assemblyDefinition);
                if (verbose)
                {
                    checkTimer.stop();
                }
            }
        }
        public static void removeO2CirDataFile(ICirDataAnalysis cirDataAnalysis, String sO2CirDataFileToRemove)
        {
            if (cirDataAnalysis.dCirDataFilesLoaded.ContainsKey(sO2CirDataFileToRemove))
            {
                ICirData fcdCirData = cirDataAnalysis.dCirDataFilesLoaded[sO2CirDataFileToRemove];
                cirDataAnalysis.dCirDataFilesLoaded.Remove(sO2CirDataFileToRemove);

                foreach (ICirClass ccCirClass in fcdCirData.dClasses_bySignature.Values)
                {
                    if (cirDataAnalysis.dCirClass.ContainsKey(ccCirClass))
                    {
                        cirDataAnalysis.dCirClass.Remove(ccCirClass);
                        cirDataAnalysis.dCirClass_bySignature.Remove(ccCirClass.Signature);

                        foreach (ICirFunction cfCirFunction in ccCirClass.dFunctions.Values)
                        {
                            if (cirDataAnalysis.dCirFunction.ContainsKey(cfCirFunction))
                            {
                                cirDataAnalysis.dCirFunction.Remove(cfCirFunction);
                                cirDataAnalysis.dCirFunction_bySignature.Remove(cfCirFunction.FunctionSignature);
                            }
                            else
                            {
                            }
                        }
                    }
                    else
                    {
                    }
                }
                showStatsOfLoadedData(cirDataAnalysis);
            }
        }
Ejemplo n.º 5
0
 public static KM_CirAction setCirData(ICirData cirData)
 {
     var kmCirAction = new KM_CirAction();
     kmCirAction.CirData = cirData;
     kmCirAction.CirAction = IM_CirActions.setCirData;
     return kmCirAction;
 }
        /// <summary>
        /// this will return the current CirFunction object for the signature provided or create a new CirFunction
        /// object and return it
        /// </summary>
        /// <param name="cirData"></param>
        /// <param name="functionSignature"></param>
        /// <param name="functionType"></param>
        /// <returns></returns>
        public ICirFunction getCirFunction(ICirData cirData, string functionSignature, string functionType)
        {
            try
            {
            
                if (cirData.dFunctions_bySignature.ContainsKey(functionSignature))
                    return cirData.dFunctions_bySignature[functionSignature];

                // create the function reference                
                var newCirFunction = new CirFunction(functionSignature);
                cirData.dFunctions_bySignature.Add(functionSignature, newCirFunction);

                // add it to the respective CirClas

                var cirClass = getCirClass(cirData,functionType);
                cirClass.dFunctions.Add(functionSignature, newCirFunction);

                return newCirFunction;
            }
            catch (Exception ex)
            {
                DI.log.ex(ex, "in CirFactory.getCirFunction", true);
                return null;
            }
        }
        public void mapClass(ICirClass cirClass, ICirData _cirData, bool clearPreviousList)
        {

            cirData = _cirData;
            cirRootClass = cirClass;
            mapCurrentClass(clearPreviousList);
        }
Ejemplo n.º 8
0
 public static void calculateListofMethodsCalledByClass_Recursive(
     ICirClass ccClass, List <ICirClass> lccTargetCompilationClasses, List <String> lsFunctionsCalled,
     String sResultsFilter /*, Dictionary<String, String> dFunctionsNames*/, ICirData fcdCirData)
 {
     if (ccClass != null)
     {
         foreach (ICirFunction cfCirFunction in ccClass.dFunctions.Values)
         {
             foreach (ICirFunction cirFunctionCalled in cfCirFunction.FunctionsCalledUniqueList)
             {
                 String sName = cirFunctionCalled.FunctionSignature;
                 //    if (sName.IndexOf("()") == -1)                          // don't add functions that receive no parameters
                 if (sResultsFilter == "" || sName.IndexOf(sResultsFilter) > -1)
                 {
                     if (false == lsFunctionsCalled.Contains(cirFunctionCalled.FunctionSignature))
                     {
                         lsFunctionsCalled.Add(cirFunctionCalled.FunctionSignature);
                         ICirClass ccCalledClass = getCirClassObjectFromFunctionSignature(cirFunctionCalled.FunctionSignature, fcdCirData);
                         if (false == lccTargetCompilationClasses.Contains(ccCalledClass))
                         {
                             lccTargetCompilationClasses.Add(ccCalledClass);
                         }
                         calculateListofMethodsCalledByClass_Recursive(ccCalledClass, lccTargetCompilationClasses,
                                                                       lsFunctionsCalled, sResultsFilter,
                                                                       /*dFunctionsNames,*/ fcdCirData);
                         //     getCirClassObjectFromFunctionDef(sFunctionCalled,dFunctionsNames, fcdCirData);
                     }
                 }
             }
         }
     }
 }
Ejemplo n.º 9
0
        public void Test_ProcessingAllO2AssembliesFromDirectory(ICirData cirData, string targetDirectory, bool verify,
                                                                bool verbose)
        {
            O2Timer checkTimer =
                new O2Timer("Test_ProcessingAllAssembliesFromDirectory " + targetDirectory + " took ").start();
            List <string> targetAssemblies = Files.getFilesFromDir_returnFullPath(targetDirectory, "*.exe");

            targetAssemblies.AddRange(Files.getFilesFromDir_returnFullPath(targetDirectory, "*.dll"));
            //targetAssemblies.AddRange();
            DI.log.debug("Testing processing of {0} dlls and exes directory {1}", targetAssemblies.Count,
                         targetDirectory);
            if (!verify)
            {
                DI.log.debug("Note, verification is disabled");
            }
            foreach (string targetDll in targetAssemblies)
            {
                if (CecilUtils.isDotNetAssembly(targetDll, false))
                {
                    Test_LoadingAssembly(cirData, targetDll, verify, verbose);
                }
            }
            CirFactoryUtils.showCirDataStats(cirData);
            checkTimer.stop();
        }
        /// <summary>
        /// this will return the current CirFunction object for the signature provided or create a new CirFunction
        /// object and return it
        /// </summary>
        /// <param name="cirData"></param>
        /// <param name="functionSignature"></param>
        /// <param name="functionType"></param>
        /// <returns></returns>
        public ICirFunction getCirFunction(ICirData cirData, string functionSignature, string functionType)
        {
            try
            {
                if (cirData.dFunctions_bySignature.ContainsKey(functionSignature))
                {
                    return(cirData.dFunctions_bySignature[functionSignature]);
                }

                // create the function reference
                var newCirFunction = new CirFunction(functionSignature);
                cirData.dFunctions_bySignature.Add(functionSignature, newCirFunction);

                // add it to the respective CirClas

                var cirClass = getCirClass(cirData, functionType);
                cirClass.dFunctions.Add(functionSignature, newCirFunction);

                return(newCirFunction);
            }
            catch (Exception ex)
            {
                DI.log.ex(ex, "in CirFactory.getCirFunction", true);
                return(null);
            }
        }
        public void test_SaveAndLoadAllO2Modules()
        {
            var directoryToSaveCidDataFiles = Path.Combine(DI.config.O2TempDir, "_O2_CirData_Files");

            Files.checkIfDirectoryExistsAndCreateIfNot(directoryToSaveCidDataFiles);
            List <string> targetAssemblies = Files.getFilesFromDir_returnFullPath(DI.config.hardCodedO2LocalBuildDir, "*.exe");

            targetAssemblies.AddRange(Files.getFilesFromDir_returnFullPath(DI.config.hardCodedO2LocalBuildDir, "*.dll"));
            foreach (var assemblyToProcess in targetAssemblies)
            {
                DI.log.info("Processing file: {0}", Path.GetFileName(assemblyToProcess));
                ICirData cirData = new CirData();
                cirFactory.processAssemblyDefinition(cirData, assemblyToProcess);
                Assert.That(cirData.dClasses_bySignature.Count > 0 && cirData.dFunctions_bySignature.Count > 0,
                            "There we no CirData results for :" + assemblyToProcess);
                var savedCirDataFile = Path.Combine(directoryToSaveCidDataFiles,
                                                    Path.GetFileName(assemblyToProcess) + ".CirData");
                CirDataUtils.saveSerializedO2CirDataObjectToFile(cirData, savedCirDataFile);
                Assert.That(File.Exists(savedCirDataFile), "Saved CirData file Didn't exist: " + savedCirDataFile);

                ICirData cirData2 = CirLoad.loadFile(savedCirDataFile);
                Assert.That(cirData2 != null, "cirData2 was null");
                Assert.That(cirData.dClasses_bySignature.Count == cirData2.dClasses_bySignature.Count,
                            "dClasses_bySignature Count didnt match");
                Assert.That(cirData.dFunctions_bySignature.Count == cirData2.dFunctions_bySignature.Count,
                            "dFunctions_bySignature Count didnt match");
                // comment this to delete created files
                //File.Delete(savedCirDataFile);
            }
        }
Ejemplo n.º 12
0
 public void LoadFile(String sFileToLoad)
 {
     if (Path.GetExtension(sFileToLoad).ToLower() == ".cirdata")
     {
         cdCirData = CirLoad.loadSerializedO2CirDataObject(sFileToLoad);
         lbCirFileLoaded.Text = Path.GetFileName(sFileToLoad);
     }
     else
     {                
         if (Path.GetExtension(sFileToLoad).ToLower() == ".xml" ||
             Path.GetExtension(sFileToLoad).ToLower() == ".ozasmt")
         {
             var oadO2AssessmentDataOunceV6 = JoinTracesUtils.loadAssessmentRunFileAndAddItToList(sFileToLoad);
             if (oadO2AssessmentDataOunceV6 != null)
             {
                 foreach (object oItem in lbTargetSavedAssessmentFiles.Items)
                     if (oItem.ToString() == oadO2AssessmentDataOunceV6.ToString())
                     {
                         DI.log.error(
                             "in loadAssessmentRunFileAndAddItToList, file is already in the list of F1AssessmentRun objects");                                
                         return;
                     }
                 lbTargetSavedAssessmentFiles.Items.Add(oadO2AssessmentDataOunceV6);
             }
         }
         else
             DI.log.debug("Skipping loading file (since it is one of type: .cirdata, .xml or .ozasmt: {0}",
                          sFileToLoad);
     }
 }
Ejemplo n.º 13
0
        private void handleDrop(string fileOrFolderToProcess)
        {
            if (File.Exists(fileOrFolderToProcess))
            {
                var springMvcMappings = (SpringMvcMappings)Serialize.getDeSerializedObjectFromXmlFile(fileOrFolderToProcess, typeof(SpringMvcMappings));
                if (springMvcMappings == null)
                {
                    DI.log.error("in handleDrop: Could not create SpringMvcMappings object from :{0}", fileOrFolderToProcess);
                    return;
                }

                var cirDataFileToLoad = Path.Combine(Path.GetDirectoryName(fileOrFolderToProcess), springMvcMappings.cirDataFile);
                if (false == File.Exists(cirDataFileToLoad))
                {
                    DI.log.error("in handleDrop: Could not find cirData object to load :{0}", cirDataFileToLoad);
                    return;
                }
                cirData = CirLoad.loadSerializedO2CirDataObject(cirDataFileToLoad);
                if (cirData == null)
                {
                    DI.log.error("in handleDrop: Could not create CirData object from :{0}", cirDataFileToLoad);
                    return;
                }
                loadedSpringMvcControllers = springMvcMappings.controllers;
                createTreeNodesForLoadedSpringMvcControllers();
                showLoadedControllers();
            }
        }
 public void LoadFile(String sFileToLoad)
 {
     if (Path.GetExtension(sFileToLoad).ToLower() == ".cirdata")
     {
         cdCirData            = CirLoad.loadSerializedO2CirDataObject(sFileToLoad);
         lbCirFileLoaded.Text = Path.GetFileName(sFileToLoad);
     }
     else
     {
         if (Path.GetExtension(sFileToLoad).ToLower() == ".xml" ||
             Path.GetExtension(sFileToLoad).ToLower() == ".ozasmt")
         {
             var oadO2AssessmentDataOunceV6 = loadAssessmentRunFileAndAddItToList(sFileToLoad);
             if (oadO2AssessmentDataOunceV6 != null)
             {
                 foreach (object oItem in lbTargetSavedAssessmentFiles.Items)
                 {
                     if (oItem.ToString() == oadO2AssessmentDataOunceV6.ToString())
                     {
                         DI.log.error(
                             "in loadAssessmentRunFileAndAddItToList, file is already in the list of F1AssessmentRun objects");
                         return;
                     }
                 }
                 lbTargetSavedAssessmentFiles.Items.Add(oadO2AssessmentDataOunceV6);
             }
         }
         else
         {
             DI.log.debug("Skipping loading file (since it is one of type: .cirdata, .xml or .ozasmt: {0}",
                          sFileToLoad);
         }
     }
 }
Ejemplo n.º 15
0
 public void loadMappedControllers(ICirData _cirData, List <SpringMvcController> _springMvcControllers)
 {
     cirData = _cirData;
     loadedSpringMvcControllers = _springMvcControllers;
     createTreeNodesForLoadedSpringMvcControllers();
     showLoadedControllers();
 }
Ejemplo n.º 16
0
        public void Test_processTypeDefinition(ICirData cirData, ICirClass cirClass)
        {
            Assert.That(cirClass != null, "cirClass was null");
            Assert.That(cirClass.dFunctions.Count == 7, "cirClass.dFunctions.Count != 7 , it was " + cirClass.dFunctions.Count);

            // check if we can get the functions by name
            ICirFunction testMethodA = cirClass.getFunction("testMethodA()");
            Assert.IsNotNull(testMethodA, "could not get testMethodA from cirClass object");
            ICirFunction testMethodB = cirClass.getFunction("testMethodB()");
            Assert.IsNotNull(testMethodB, "could not get testMethodB from cirClass object");
            Assert.IsNotNull(cirClass.getFunction("testMethodB(System.String)"),
                             "could not get testMethodB(string) from cirClass object");
            Assert.IsNotNull(cirClass.getFunction("testMethodD(System.String,System.Type)"),
                             "could not get testMethodD(System.String,System.Type) from cirClass object");

            ICirFunction testMethodC = cirClass.getFunction("testMethodC");

            // check if we have the calls and isCalledBy
            Assert.That(testMethodA.FunctionsCalledUniqueList.Contains(testMethodB),
                        "failed on testMethodA.FunctionsCalledUniqueList.Contains(testMethodB)");
            Assert.That(testMethodA.FunctionsCalledUniqueList.Contains(testMethodC),
                        "failed on testMethodA.FunctionsCalledUniqueList.Contains(testMethodB)");
            var found = false;
            foreach (var calledByFunction in testMethodB.FunctionIsCalledBy)
                if (calledByFunction.cirFunction == testMethodA)
                    found = true;
            Assert.That(found,
                        "failed on testMethodB.FunctionIsCalledBy.Contains(testMethodA)");
        }
        public static O2RulePack createRules_CallBacksOnControlFlowGraphs_And_ExternalSinks(String sCirDataFile)
        {
            var rpRulePack = new O2RulePack();

            if (false == File.Exists(sCirDataFile))
            {
                DI.log.error(
                    "in createRules_CallBacksOnControlFlowGraphs_And_ExternalSinks, provide CirData file not found: {0}",
                    sCirDataFile);
            }
            else
            {
                List <String> lsFunctions = MiscUtils.getFunctionsSignaturesFrom02CirData(sCirDataFile);
                // in this type of scan, there are two rules
                // if functions have a ControlFlowGraph they are Callbacks
                // everything else is a sink

                ICirData fcdCirData = CirLoad.loadSerializedO2CirDataObject(sCirDataFile);
                Dictionary <String, ICirFunction> dFunctionsWithControlFlowGraphs =
                    CirDataUtils.getFunctionsWithControlFlowGraph(fcdCirData);
                foreach (string sFunction in lsFunctions)
                {
                    if (dFunctionsWithControlFlowGraphs.ContainsKey(sFunction))
                    {
                        addRule(createRule(O2RuleType.Callback, sFunction, fcdCirData.sDbId), rpRulePack);
                    }
                    else
                    {
                        addRule(createRule(O2RuleType.Sink, sFunction, fcdCirData.sDbId), rpRulePack);
                    }
                }
            }
            return(rpRulePack);
        }
        public void processAssemblyDefinition(ICirData cirData, AssemblyDefinition assemblyDefinition, string assemblyPath, bool decompileCodeIfNoPdb)
        {
            var tempSourceCodeFolder = DI.config.getTempFolderInTempDirectory("_O2_DecompiledDotNet_" + assemblyDefinition.Name.Name);

            if (cirData != null && assemblyDefinition != null)
            {
                var typesInAssembly = CecilUtils.getTypes(assemblyDefinition);
                loadAndMapSymbols(assemblyDefinition, assemblyPath, decompileCodeIfNoPdb, tempSourceCodeFolder);
                // first map all types
                foreach (var typeInAssembly in typesInAssembly)
                {
                    processTypeDefinition(cirData, typeInAssembly);
                }

                //then map their interfaces
                foreach (var typeInAssembly in typesInAssembly)
                {
                    mapTypeInterfaces(cirData, typeInAssembly);
                }

                // finally decompile the code if needed

                /*if (decompileCodeIfNoPdb)
                 * {
                 *  var sourceCodeFolder = DI.config.getTempFolderInTempDirectory("_O2_DecompiledDotNet_" +assemblyDefinition.Name.Name);
                 *  foreach (var cirClass in cirData.dClasses_bySignature.Values)
                 *      if(cirClass.
                 *      new CecilDecompiler().decompile(typeInAssembly, sourceCodeFolder)
                 * }*/
            }
            else
            {
                DI.log.error("in processAssemblyDefinition, either cirData or assemblyDefinition was null");
            }
        }
        public static KM_CirAction setCirData(ICirData cirData)
        {
            var kmCirAction = new KM_CirAction();

            kmCirAction.CirData   = cirData;
            kmCirAction.CirAction = IM_CirActions.setCirData;
            return(kmCirAction);
        }
        public static ascx_CirDataViewer show(this ICirData cirData, int namespaceDepth)
        {
            var cirDataViewer = typeof(ascx_CirDataViewer).openControlAsForm <ascx_CirDataViewer>("CirData", 500, 300);

            cirDataViewer.namespaceDepth(namespaceDepth);
            cirDataViewer.loadCirData(cirData);
            cirDataViewer.showLoadedFunctions();
            return(cirDataViewer);
        }
Ejemplo n.º 21
0
 public static KM_CirAction setCirData(ICirData cirData)
 {
     var kmCirAction = new KM_CirAction
                           {
                               CirAction = IM_CirActions.setCirData,
                               CirData = cirData
                           };
     return kmCirAction;
 }
 public ICirDataAnalysis loadCirData(ICirData cirDataToLoad, bool clearLoadedData)
 {
     if (clearLoadedData)
     {
         deleteAllLoadedData();
     }
     CirDataAnalysisUtils.addO2CirDataFile(cirDataAnalysis, cirDataToLoad);
     return(cirDataAnalysis);
 }
Ejemplo n.º 23
0
 public static string stats(this ICirData cirData)
 {
     return(("".line().line() +
             "CirData Stats:".line() +
             "  {0} classes".line() +
             "  {1} funtions".line())
            .format(cirData.dClasses_bySignature.Count,
                    cirData.dFunctions_bySignature.Count));
 }
Ejemplo n.º 24
0
 public void clearLoadedData()
 {
     this.invokeOnThread(() =>
     {
         cirData        = null;
         cirRootClass   = null;
         cirClassMapped = new List <ICirClass>();
         tvBindableFields.Nodes.Clear();
     });
 }
Ejemplo n.º 25
0
        public static KM_CirAction setCirData(ICirData cirData)
        {
            var kmCirAction = new KM_CirAction
            {
                CirAction = IM_CirActions.setCirData,
                CirData   = cirData
            };

            return(kmCirAction);
        }
 public void showSpringSuperClasses(List <String> lsClasses, ICirData fadCirData)
 {
     tvSpringMvc_SuperClasses.Nodes.Clear();
     foreach (String sClass in lsClasses)
     {
         ICirClass ccCirClass = fadCirData.dClasses_bySignature[sClass];
         var       tnClass    = new TreeNode(ccCirClass.Signature);
         addIsSuperClassedByToTreeNode_ReCursive(tnClass, ccCirClass);
         tvSpringMvc_SuperClasses.Nodes.Add(tnClass);
     }
 }
Ejemplo n.º 27
0
        public static List <String> getListOfFilesToScanFromListOfClasses_J2EE(String sSourcePathToJavaFiles,
                                                                               String sSourcePathToJspFiles,
                                                                               List <ICirClass> lccTargetCompilationClasses,
                                                                               ICirData fcdCirData)
        {
            var sPathsToClassFilesSourceCode = new List <string>();

            foreach (ICirClass ccCirClass in lccTargetCompilationClasses)
            {
                if (ccCirClass != null)
                {
                    String sFilePath = ccCirClass.Signature;
                    sFilePath = sFilePath.Replace(".", @"\");
                    if (sFilePath.IndexOf("_jsp") > -1)
                    {
                        bool bFoundFile = false;
                        sFilePath = sFilePath.Substring(sFilePath.IndexOf(@"\"));
                        sFilePath = sFilePath.Replace("_jsp", ".jsp");
                        foreach (String sFile in fcdCirData.lFiles)
                        {
                            if (sFile.IndexOf(sFilePath) > -1)
                            {
                                sPathsToClassFilesSourceCode.Add(sFile);
                                bFoundFile = true;
                                break;
                            }
                        }
                        if (false == bFoundFile)
                        {
                            DI.log.error(
                                "in createOunceProjectForAllReferencesOf_Class, could not resolve jsp file: {0}",
                                sFilePath);
                        }
                    }
                    else
                    {
                        sFilePath = Path.Combine(sSourcePathToJavaFiles, sFilePath + ".java");
                        if (fcdCirData.lFiles.Contains(sFilePath))
                        {
                            sPathsToClassFilesSourceCode.Add(sFilePath);
                        }

                        else
                        {
                            DI.log.error(
                                "in createOunceProjectForAllReferencesOf_Class, could not resolve class to file: {0}",
                                ccCirClass.Signature);
                        }
                    }
                }
            }
            return(sPathsToClassFilesSourceCode);
        }
        public void mapTypeInterfaces(ICirData cirData, TypeDefinition typeToMap)
        {
            var classSignature = CirFactoryUtils.getTypeUniqueSignatureFromTypeReference(typeToMap);
            var cirClass       = getCirClass(cirData, classSignature);

            foreach (object interfaceType in typeToMap.Interfaces)
            {
                var type = interfaceType.GetType().FullName;

                TypeReference typeReference = null;

                switch (interfaceType.GetType().FullName)
                {
                case "Mono.Cecil.GenericInstanceType":
                {
                    //var genericInstanceType = (GenericInstanceType)interfaceType;
                    typeReference = (GenericInstanceType)interfaceType;
                    break;
                }

                case "Mono.Cecil.TypeReference":
                {
                    typeReference = (TypeReference)interfaceType;
                    break;
                }

                case "Mono.Cecil.TypeDefinition":
                {
                    typeReference = (TypeReference)interfaceType;
                    break;
                }

                default:
                {
                    DI.log.error("in mapTypeInterfaces, unsupported interface type: {0}", interfaceType.GetType().FullName);
                    break;
                }
                }
                if (typeReference != null)
                {
                    // typeReference = (TypeReference)interfaceType;
                    var typeReferenceSignature = CirFactoryUtils.getTypeUniqueSignatureFromTypeReference(typeReference);
                    var typeReferenceCirClass  = getCirClass(cirData, typeReferenceSignature);
                    cirClass.dSuperClasses.Add(typeReferenceCirClass.Signature, typeReferenceCirClass);
                }
            }
            if (typeToMap.BaseType != null)
            {
                var baseTypeSignature = CirFactoryUtils.getTypeUniqueSignatureFromTypeReference(typeToMap.BaseType);
                var baseCirClass      = getCirClass(cirData, baseTypeSignature);
                cirClass.dSuperClasses.Add(baseCirClass.Signature, baseCirClass);
            }
        }
Ejemplo n.º 29
0
 public static void resolveDbId(ICirData cirData)
 {
     if (cirData.lFiles.Count > 0) // && (sDbId == "" || sDbId == null))
         foreach (String sFile in cirData.lFiles)
         {
             String sResult = CirDumpsUtils.fromFileExtension_get_DbId(Path.GetExtension(sFile));
             if (!string.IsNullOrEmpty(sResult))
             {
                 cirData.sDbId = sResult;
                 return;
             }
         }
 }
        public static TreeNode[] getNodes_ThatUseGetParameter_RecursiveSearch(ICirData cirdata, Dictionary <SpringMvcController, TreeNode> treeNodesForloadedSpringMvcControllers)
        {
            var nodes = new List <TreeNode>();

            foreach (SpringMvcController springMcvController in treeNodesForloadedSpringMvcControllers.Keys)
            {
                if (SpringMvcUtils.doesControllerFunctionCallFunction(cirdata, springMcvController, javaxGetParameterSignatures, true))
                {
                    nodes.Add(O2Forms.cloneTreeNode(treeNodesForloadedSpringMvcControllers[springMcvController]));
                }
            }
            return(nodes.ToArray());
        }
        public static TreeNode getTreeNodeWithAutoWiredObject(ICirData cirData, string targetFunction, SpringMvcParameter springMvcParameter, int parameterIndex)
        {
            try
            {
                if (cirData != null && cirData.dFunctions_bySignature.ContainsKey(targetFunction))
                {
                    var cirFunction = cirData.dFunctions_bySignature[targetFunction];
                    if (cirFunction.FunctionParameters.Count <= parameterIndex)
                    {
                        var filteredSignature = new O2.DotNetWrappers.Filters.FilteredSignature(targetFunction);
                        if (filteredSignature.lsParameters_Parsed.Count > parameterIndex)
                        {
                            springMvcParameter.className = filteredSignature.lsParameters_Parsed[parameterIndex];
                        }
                        else
                        {
                            DI.log.error("in getTreeNodeWithAutoWiredObject, requested parameter index not found in function: {0}", targetFunction);
                        }
                    }
                    else
                    {
                        var functionParameter = cirFunction.FunctionParameters[parameterIndex];
                        springMvcParameter.className = functionParameter.ParameterType.Replace("&", "");
                    }
                    if (springMvcParameter.className != "")
                    {
                        // Hack to handle int Java mappings
                        if (springMvcParameter.className == "int")
                        {
                            springMvcParameter.className = "java.lang.Integer";
                        }
                        if (cirData.dClasses_bySignature.ContainsKey(springMvcParameter.className))
                        {
                            var childNodeText = string.Format("{0} - {1} - {2}", springMvcParameter.autoWiredMethodUsed, springMvcParameter.name, springMvcParameter.className);
                            return(O2Forms.newTreeNode(childNodeText, childNodeText, 0, cirData.dClasses_bySignature[springMvcParameter.className]));
                        }

                        DI.log.error("in getTreeNodeWithAutoWiredObject, parameter type not found in cirData class list:{0}", springMvcParameter.className);
                    }
                }
                else
                {
                    DI.log.error("in getTreeNodeWithAutoWiredObject, loaded cirData did not contained signature :{0}", targetFunction);
                }
            }
            catch (Exception ex)
            {
                DI.log.error("in getTreeNodeWithAutoWiredObject:", ex.Message);
            }
            return(new TreeNode());
        }
        public static List<IO2Finding> mapInterfaces(List<IO2Finding> o2Findings, List<IO2Finding> sourcesMappedToInterfaces, ICirData cirData)
        {
            if (o2Findings == null || cirData == null)
                return null;
            //var sourcesMappedToInterfaces = getSourcesMappedToInterfaces(o2Findings, cirData);
            var sources = getSources(sourcesMappedToInterfaces);
            var lostSinks = getLostSinks(o2Findings);//o2Assessment.o2Findings);
            //var sources = getSources(o2Assessment.o2Findings);

            DI.log.info("There are {0} unique Lost Sinks", lostSinks.Count);
            DI.log.info("There are {0} unique Sources", sources.Count);
            var joinedFindings = mapSinksToSources(lostSinks, sources);
            return joinedFindings;
        }
 private ICirFunction processMemberReference(ICirData cirData, IMemberReference memberDefinition, SequencePoint sequencePoint)
 {
     switch (memberDefinition.GetType().Name)
     {
         case "MethodReference":
             return processMethodReference(cirData, (MethodReference)memberDefinition, sequencePoint);
         case "MethodDefinition":
             return processMethodDefinition(cirData, (MethodDefinition)memberDefinition, sequencePoint);
         default:
             DI.log.error("in CirFactory.processMethodMember, unsupported MethodMember: {0}", memberDefinition.GetType().Name);
             break;
     }
     return null;
 }
Ejemplo n.º 34
0
        public void createCirDataObject()
        {
            cirData = new CirData();            
            DI.log.info("using assembly:{0} and O2_Kernel.dll", Assembly.GetExecutingAssembly().Location);
            cirFactory.processAssemblyDefinition(cirData,Assembly.GetExecutingAssembly().Location);
            cirFactory.processAssemblyDefinition(cirData, DI.config.ExecutingAssembly);
            /* // this will load all dlls in the O2 dir
            foreach(var file in Files.getFilesFromDir_returnFullPath(DI.hardCodedO2DeploymentDir,"*.dll"))
                cirFactory.processAssemblyDefinition(cirData, CecilUtils.getAssembly(file));*/

            Assert.That(cirData.dClasses_bySignature.Count > 0, "There were no classes in cirData object");
            Assert.That(cirData.dFunctions_bySignature.Count > 0, "There were no function in cirData object");
            CirFactoryUtils.showCirDataStats(cirData);
        }
Ejemplo n.º 35
0
        public void createCirDataObject()
        {
            cirData = new CirData();
            DI.log.info("using assembly:{0} and O2_Kernel.dll", Assembly.GetExecutingAssembly().Location);
            cirFactory.processAssemblyDefinition(cirData, Assembly.GetExecutingAssembly().Location);
            cirFactory.processAssemblyDefinition(cirData, DI.config.ExecutingAssembly);

            /* // this will load all dlls in the O2 dir
             * foreach(var file in Files.getFilesFromDir_returnFullPath(DI.hardCodedO2DeploymentDir,"*.dll"))
             *  cirFactory.processAssemblyDefinition(cirData, CecilUtils.getAssembly(file));*/

            Assert.That(cirData.dClasses_bySignature.Count > 0, "There were no classes in cirData object");
            Assert.That(cirData.dFunctions_bySignature.Count > 0, "There were no function in cirData object");
            CirFactoryUtils.showCirDataStats(cirData);
        }
Ejemplo n.º 36
0
        public static List<TreeNode> createListOfNormalizedTraces(
            string textFilter, Dictionary<String, O2TraceBlock_OunceV6> dRawData,
            ICirData cdCirData, Dictionary<String, O2TraceBlock_OunceV6> dO2TraceBlock, 
            bool bOnlyProcessTracesWithNoCallers)
        {
            //var tvCreatedTraces_NormalizedTracesView = new TreeView();
            var normalizedTracesView = analyzer.ResolveNormalizeTraceFor(textFilter, dRawData,
                                                                         cdCirData, dO2TraceBlock,
                                                                         bOnlyProcessTracesWithNoCallers);


            DI.log.info("getListOfNormalizedTraces");
            List<TreeNode> ltnNormalizedTraces = analyzer.getListOfNormalizedTraces(normalizedTracesView);
            return ltnNormalizedTraces;
        }
        private ICirFunction processMemberReference(ICirData cirData, IMemberReference memberDefinition, SequencePoint sequencePoint)
        {
            switch (memberDefinition.GetType().Name)
            {
            case "MethodReference":
                return(processMethodReference(cirData, (MethodReference)memberDefinition, sequencePoint));

            case "MethodDefinition":
                return(processMethodDefinition(cirData, (MethodDefinition)memberDefinition, sequencePoint));

            default:
                DI.log.error("in CirFactory.processMethodMember, unsupported MethodMember: {0}", memberDefinition.GetType().Name);
                break;
            }
            return(null);
        }
 /// <summary>
 /// this will return the current CirClass object for the signature provided or create a new CirClass
 /// object and return it 
 /// </summary>
 /// <param name="cirData"></param>
 /// <param name="classSignature"></param>
 /// <returns></returns>
 private static ICirClass getCirClass(ICirData cirData, string classSignature)
 {
     try
     {
         if (cirData.dClasses_bySignature.ContainsKey(classSignature))
             return cirData.dClasses_bySignature[classSignature];
         var newCirClass = new CirClass(classSignature);
         cirData.dClasses_bySignature.Add(classSignature, newCirClass);
         return newCirClass;
     }
     catch (Exception ex)
     {
         DI.log.ex(ex, "in CirFactory.getCirClass", true);
         return null;
     }
 }
Ejemplo n.º 39
0
        public static List <TreeNode> createListOfNormalizedTraces(
            string textFilter, Dictionary <String, O2TraceBlock_OunceV6> dRawData,
            ICirData cdCirData, Dictionary <String, O2TraceBlock_OunceV6> dO2TraceBlock,
            bool bOnlyProcessTracesWithNoCallers)
        {
            //var tvCreatedTraces_NormalizedTracesView = new TreeView();
            var normalizedTracesView = analyzer.ResolveNormalizeTraceFor(textFilter, dRawData,
                                                                         cdCirData, dO2TraceBlock,
                                                                         bOnlyProcessTracesWithNoCallers);


            DI.log.info("getListOfNormalizedTraces");
            List <TreeNode> ltnNormalizedTraces = analyzer.getListOfNormalizedTraces(normalizedTracesView);

            return(ltnNormalizedTraces);
        }
 internal string processAssemblyAndSaveAsCirDataFile(ICirData cirData, string fileToProcess, string directoryToSaveCirDataFile, bool decompileCodeIfNoPdb)
 {
     processAssemblyDefinition(cirData, fileToProcess, decompileCodeIfNoPdb);
     if (cirData.dClasses_bySignature.Count == 0)
     {
         DI.log.error("There were no classes in created cirData file, so canceling save");
     }
     else
     {
         Files.checkIfDirectoryExistsAndCreateIfNot(directoryToSaveCirDataFile);
         var savedFileName = Path.Combine(directoryToSaveCirDataFile, Path.GetFileName(fileToProcess) + ".CirData");
         CirDataUtils.saveSerializedO2CirDataObjectToFile(cirData, savedFileName);
         return(savedFileName);
     }
     return("");
 }
Ejemplo n.º 41
0
        public static ICirClass getCirClassObjectFromFunctionSignature(String functionSignature,
                                                                       //Dictionary<String, String> dFunctionsNames,
                                                                       ICirData fcdCirData)
        {
            //String sSignatureOfFunctionCalled = sFunctionDef;

            //if (dFunctionsNames.ContainsKey(functionSignature))
            if (fcdCirData.dFunctions_bySignature.ContainsKey(functionSignature))
            {
                ICirFunction cirFunction = fcdCirData.dFunctions_bySignature[functionSignature];
                //fcdCirData.dFunctions_bySymbolDef[dFunctionsNames[sSignatureOfFunctionCalled]];
                return(cirFunction.ParentClass);
            }
            DI.log.error("in getCirClassObjectFromFunctionDef, could not resolve class object");
            //else
            return(null);
        }
        public static TreeNode getTreeNodeWithAutoWiredObject(ICirData cirData, string targetFunction, SpringMvcParameter springMvcParameter, int parameterIndex)
        {
            try
            {

                if (cirData != null && cirData.dFunctions_bySignature.ContainsKey(targetFunction))
                {
                    var cirFunction = cirData.dFunctions_bySignature[targetFunction];
                    if (cirFunction.FunctionParameters.Count <= parameterIndex)
                    {
                        var filteredSignature = new FilteredSignature(targetFunction);
                        if (filteredSignature.lsParameters_Parsed.Count > parameterIndex)
                            springMvcParameter.className = filteredSignature.lsParameters_Parsed[parameterIndex];
                        else
                            DI.log.error("in getTreeNodeWithAutoWiredObject, requested parameter index not found in function: {0}", targetFunction);
                    }
                    else
                    {
                        var functionParameter = cirFunction.FunctionParameters[parameterIndex];
                        springMvcParameter.className = functionParameter.ParameterType.Replace("&", "");
                    }
                    if (springMvcParameter.className != "")
                    {

                        // Hack to handle int Java mappings 
                        if (springMvcParameter.className == "int")
                            springMvcParameter.className = "java.lang.Integer";
                        if (cirData.dClasses_bySignature.ContainsKey(springMvcParameter.className))
                        {
                            var childNodeText = string.Format("{0} - {1} - {2}", springMvcParameter.autoWiredMethodUsed, springMvcParameter.name, springMvcParameter.className);
                            return O2Forms.newTreeNode(childNodeText, childNodeText, 0, cirData.dClasses_bySignature[springMvcParameter.className]);
                        }

                        DI.log.error("in getTreeNodeWithAutoWiredObject, parameter type not found in cirData class list:{0}", springMvcParameter.className);
                    }
                }
                else
                    DI.log.error("in getTreeNodeWithAutoWiredObject, loaded cirData did not contained signature :{0}", targetFunction);
            }
            catch (Exception ex)
            {
                DI.log.error("in getTreeNodeWithAutoWiredObject:", ex.Message);
            }
            return new TreeNode();
        }
Ejemplo n.º 43
0
        public static void addIsCalledByMappings(ICirData cirData, ICirData fcdO2CirDataToProcess)
        {
            DI.log.debug("in addIsCalledByMappings");

            foreach (CirFunction cfCirFunction in fcdO2CirDataToProcess.dFunctions_bySignature.Values)
                foreach (ICirFunctionCall cirFunctionCalled in cfCirFunction.FunctionsCalled)
                {
                    if (cirData.dFunctions_bySignature.ContainsKey(cirFunctionCalled.cirFunction.FunctionSignature))
                    {
                        if (cirData.dFunctions_bySignature[cirFunctionCalled.cirFunction.FunctionSignature].HasControlFlowGraph)            // not sure about this
                        {
                           /* DI.log.info("Added isCalledByMapping: {0} is called by {1}",
                                        cirData.dFunctions_bySignature[cirFunctionCalled.FunctionSignature].FunctionSignature, cfCirFunction.FunctionSignature);*/
                            cirData.dFunctions_bySignature[cirFunctionCalled.cirFunction.FunctionSignature].FunctionIsCalledBy.Add(cirFunctionCalled);
                        }
                    }
                }
        }
 /// <summary>
 /// this will return the current CirClass object for the signature provided or create a new CirClass
 /// object and return it
 /// </summary>
 /// <param name="cirData"></param>
 /// <param name="classSignature"></param>
 /// <returns></returns>
 private static ICirClass getCirClass(ICirData cirData, string classSignature)
 {
     try
     {
         if (cirData.dClasses_bySignature.ContainsKey(classSignature))
         {
             return(cirData.dClasses_bySignature[classSignature]);
         }
         var newCirClass = new CirClass(classSignature);
         cirData.dClasses_bySignature.Add(classSignature, newCirClass);
         return(newCirClass);
     }
     catch (Exception ex)
     {
         DI.log.ex(ex, "in CirFactory.getCirClass", true);
         return(null);
     }
 }
Ejemplo n.º 45
0
            public static void mapInterfaces(TreeView tvRawData, ICirData cdCirData, String sHardCodedInterfaceKeywork,
                                             bool bAddGluedTracesAsRealTraces)
            {
                DI.log.debug("Mapping Interfaces");
                O2Timer tTimer = new O2Timer("Interfaces mapping completed").start();
                // Int32 iItemsProcessed = 0;

                Dictionary <AssessmentAssessmentFileFinding, O2AssessmentData_OunceV6> dAllSinkFindings =
                    analyzer.getUniqueListOfSinks(tvRawData);

                foreach (AssessmentAssessmentFileFinding fFinding in dAllSinkFindings.Keys)
                {
                    String sSink = AnalysisUtils.getSink(fFinding, dAllSinkFindings[fFinding]);
                    if (sSink != "" && sSink.IndexOf(sHardCodedInterfaceKeywork) > -1)
                    {
                        if (false == cdCirData.dFunctions_bySignature.ContainsKey(sSink))
                        {
                            DI.log.error("in mapInterfaces, could not find signature in loaded CirData file: {0}",
                                         sSink);
                        }
                        else
                        {
                            ICirFunction cfCirFunction = cdCirData.dFunctions_bySignature[sSink];
                            ICirClass    ccCirClass    = cfCirFunction.ParentClass;
                            foreach (ICirClass ccIsSuperClassedBy in ccCirClass.dIsSuperClassedBy.Values)
                            {
                                String sMappedMethodName = cfCirFunction.FunctionSignature.Replace(ccCirClass.Signature,
                                                                                                   ccIsSuperClassedBy.
                                                                                                   Signature);
                                List <O2TraceBlock_OunceV6> lotdMatches =
                                    analyzer.getO2TraceBlocksThatMatchSignature(sMappedMethodName, tvRawData);
                                foreach (O2TraceBlock_OunceV6 otbO2TraceBlockWithTracesToGlue in lotdMatches)
                                {
                                    addFindingAsGlueTrace(otbO2TraceBlockWithTracesToGlue, fFinding,
                                                          dAllSinkFindings[fFinding], tvRawData,
                                                          bAddGluedTracesAsRealTraces);
                                }
                            }
                        }
                    }
                }

                tTimer.stop();
            }
 private static void fixFunctionsCalledXRefs(ICirData cirData)
 {
     if (cirData != null && cirData.dFunctions_bySignature != null)
     {
         var timer = new O2Timer("fixFunctionsCalledXRefs").start();
         foreach (CirFunction cirFunction in cirData.dFunctions_bySignature.Values)
         {
             if (cirFunction.FunctionName == null)
             {
                 var filteredSignature = new FilteredSignature(cirFunction.FunctionSignature);
                 cirFunction.FunctionName = filteredSignature.sFunctionName;
                 cirFunction.FunctionNameAndParameters = filteredSignature.sFunctionNameAndParams;
                 cirFunction.ClassNameFunctionNameAndParameters = filteredSignature.sFunctionClass + "." +
                                                                  filteredSignature.sFunctionNameAndParams;
             }
         }
         timer.stop();
     }
 }
Ejemplo n.º 47
0
        // this doesn't seem to be working since when I save this back into disk, the size of the .CirData file increases!
/*        public static void removeClassesWithNoControlFlowGraphs(ICirData cirData)
        {
            cirData.dClasses_bySymbolDef.Clear();
            cirData.dFunctions_bySymbolDef.Clear();
            cirData.dSymbols.Clear();
            var signaturesToRemove = new List<String>();
            int originalSignatureCount = cirData.dClasses_bySignature.Keys.Count;
            // remove CirClasses with no ControlFlowGraphs
            foreach (CirClass cirClass in cirData.dClasses_bySignature.Values)
                if (false == cirClass.bClassHasMethodsWithControlFlowGraphs)
                    signaturesToRemove.Add(cirClass.Signature);
            foreach (string signature in signaturesToRemove)
                cirData.dClasses_bySignature.Remove(signature);
            DI.log.info(
                "Originally there were {0} CirClass Objects in CirData file and now there are {1} ({2} were deleted)",
                originalSignatureCount, cirData.dClasses_bySignature.Keys.Count,
                originalSignatureCount - cirData.dClasses_bySignature.Keys.Count);

            // remove CirFunctions with no ControlFlowGraphs
            signaturesToRemove.Clear();
            originalSignatureCount = cirData.dFunctions_bySignature.Values.Count;
            foreach (CirFunction cirFunction in cirData.dFunctions_bySignature.Values)
                if (false == cirFunction.HasControlFlowGraph)
                    signaturesToRemove.Add(cirFunction.FunctionSignature);
            foreach (string signature in signaturesToRemove)
                cirData.dFunctions_bySignature.Remove(signature);
            DI.log.info(
                "Originally there were {0} CirFunction Objects in CirData file and now there are {1} ({2} were deleted)",
                originalSignatureCount, cirData.dFunctions_bySignature.Keys.Count,
                originalSignatureCount - cirData.dFunctions_bySignature.Keys.Count);
        }*/

        public static void saveSerializedO2CirDataObjectToFile(ICirData cirData, String sTargetFile)
        {
            if (cirData == null)
                return;

            if (sTargetFile == "")
                sTargetFile = DI.config.TempFileNameInTempDirectory + ".xml";

            try
            {
                var bfBinaryFormatter = new BinaryFormatter();

                var fsFileStream = new FileStream(sTargetFile, FileMode.Create);
                bfBinaryFormatter.Serialize(fsFileStream, cirData);
                fsFileStream.Close();
                DI.log.debug("Serialized O2CirData Saved to: {0}", sTargetFile);
            }
            catch (Exception ex)
            {
                DI.log.error("In saveSerializedO2CirDataObjectToFile: {0}", ex.Message);
            }
        }
        public void mapTypeInterfaces(ICirData cirData, TypeDefinition typeToMap)
        {
            var classSignature = CirFactoryUtils.getTypeUniqueSignatureFromTypeReference(typeToMap);
            var cirClass = getCirClass(cirData, classSignature);
            foreach (object interfaceType in typeToMap.Interfaces)
            {
                var type = interfaceType.GetType().FullName;

                TypeReference typeReference = null;

                switch (interfaceType.GetType().FullName)
                {
                    case "Mono.Cecil.GenericInstanceType":
                        {
                            //var genericInstanceType = (GenericInstanceType)interfaceType;
                            typeReference = (GenericInstanceType)interfaceType;
                            break;
                        }
                    case "Mono.Cecil.TypeReference":
                        {
                            typeReference = (TypeReference)interfaceType;
                            break;
                        }
                    case "Mono.Cecil.TypeDefinition":
                        {
                            typeReference = (TypeReference)interfaceType;
                            break;
                        }
                    default:
                        {
                            DI.log.error("in mapTypeInterfaces, unsupported interface type: {0}", interfaceType.GetType().FullName);
                            break;
                        }
                }        
                if (typeReference != null)
                {
                    // typeReference = (TypeReference)interfaceType;
                    var typeReferenceSignature = CirFactoryUtils.getTypeUniqueSignatureFromTypeReference(typeReference);
                    var typeReferenceCirClass = getCirClass(cirData, typeReferenceSignature);
                    cirClass.dSuperClasses.Add(typeReferenceCirClass.Signature, typeReferenceCirClass);
                }
            }
            if (typeToMap.BaseType != null)
            {
                var baseTypeSignature = CirFactoryUtils.getTypeUniqueSignatureFromTypeReference(typeToMap.BaseType);
                var baseCirClass = getCirClass(cirData, baseTypeSignature);
                cirClass.dSuperClasses.Add(baseCirClass.Signature, baseCirClass);
            }
        }
 public void clearLoadedData()
 {
     this.invokeOnThread(() =>
                             {
                                 cirData = null;
                                 cirRootClass = null;
                                 cirClassMapped = new List<ICirClass>();
                                 tvBindableFields.Nodes.Clear();
                             });
 }
 public void mapClass(ICirClass cirClass, ICirData _cirData)
 {
     mapClass(cirClass, _cirData, true);
 }
 public void showClass(ICirClass cirClass, ICirData _cirData)
 {
     mapClass(cirClass, _cirData);
 }
        public ICirFunction processMethodReference(ICirData cirData, MethodReference methodReference, SequencePoint sequencePoint)
        {
            try
            {                
                var functionSignature = CirFactoryUtils.getFunctionUniqueSignatureFromMethodReference(methodReference);
                var functionType = CirFactoryUtils.getTypeUniqueSignatureFromTypeReference(methodReference.DeclaringType);
                var cirFunction = getCirFunction(cirData, functionSignature, functionType);

                cirFunction.CecilSignature = methodReference.ToString();
                cirFunction.ReturnType = methodReference.ReturnType.ReturnType.FullName;
                cirFunction.ParentClass = getCirClass(cirData, CirFactoryUtils.getTypeUniqueSignatureFromTypeReference(methodReference.DeclaringType));
                cirFunction.ParentClassFullName = methodReference.DeclaringType.FullName;
                cirFunction.ParentClassName = methodReference.DeclaringType.Name;
                //
                cirFunction.Module = (methodReference.DeclaringType.Module != null) ? methodReference.DeclaringType.Module.Assembly.ToString() : "[NullModule]";
                //cirFunction.Module = (methodReference.DeclaringType.Module != null) ? methodReference.DeclaringType.Module.Name : "[NullModule]";
                cirFunction.FunctionName = methodReference.Name;
                cirFunction.FunctionNameAndParameters = CecilUtils.getMethodNameAndParameters(methodReference);                

                cirFunction.ClassNameFunctionNameAndParameters = string.Format("{0}.{1}",
                                                                               cirFunction.ParentClassFullName,
                                                                               cirFunction.FunctionNameAndParameters);
                cirFunction.SymbolDef = Guid.NewGuid().ToString();
                /*if (sequencePoint != null)
                {
                    if (string.IsNullOrEmpty(cirFunction.File) == false)
                    { 
                    }
                    cirFunction.File = sequencePoint.Document.Url;
                    cirFunction.FileLine = sequencePoint.StartColumn.ToString();
                }*/
                
               
                //methodReference.ReturnType  // to implement since we need to add reference to a CirClass
                return cirFunction;
            }
            catch (Exception ex)
            {
                DI.log.ex(ex, "in CirFactory.processMethodReference", true);
                return null;
            }

        }
        public ICirFunction processMethodDefinition(ICirData cirData, MethodDefinition methodDefinition, SequencePoint sequencePoint)
        {
            try
            {
                //var functionSignature = methodDefinition.ToString();
                var functionSignature = CirFactoryUtils.getFunctionUniqueSignatureFromMethodReference(methodDefinition);
                var functionClass = CirFactoryUtils.getTypeUniqueSignatureFromTypeReference(methodDefinition.DeclaringType);
                var cirFunction = getCirFunction(cirData, functionSignature, functionClass);
                if (false == cirFunction.HasBeenProcessedByCirFactory)
                {
                    if (methodDefinition.CustomAttributes != null && methodDefinition.CustomAttributes.Count > 0)
                    {
                        foreach (CustomAttribute customAttribute in methodDefinition.CustomAttributes)
                        {
                            var constructorSignature = CirFactoryUtils.getFunctionUniqueSignatureFromMethodReference(customAttribute.Constructor);
                            var cirAttribute = new CirAttribute(constructorSignature);
                            foreach (var constructorParameter in customAttribute.ConstructorParameters)
                            {
                                var type = constructorParameter.GetType().FullName;
                            }
                            if (customAttribute.Fields.Count > 0 || customAttribute.Properties.Count > 0)
                            {
                            }
                           // PublicDI.log.debug("Added attribute {0} to {1}", customAttribute.Constructor.Name, cirFunction.FunctionName);
                            cirFunction.FunctionAttributes.Add(cirAttribute);
                        }
                    }
                    

                    // map the common values with MethodReference
                    processMethodReference(cirData, methodDefinition, sequencePoint);

                    cirFunction.HasBeenProcessedByCirFactory = true;  // we need to put this in here or we will have an infinite loop on recursive functions
                    cirFunction.HasControlFlowGraph = true;           // ControlFlowGraph is use by the Viewers to determine if we have more than just a reference to this method
                    cirFunction.ParentClass.bClassHasMethodsWithControlFlowGraphs = true;  // also mark the parent class

                    cirFunction.IsStatic = methodDefinition.IsStatic;
                    cirFunction.IsUnmanaged = methodDefinition.IsUnmanaged;
                    cirFunction.IsUnmanagedExport = methodDefinition.IsUnmanagedExport;
                    cirFunction.IsVirtual = methodDefinition.IsVirtual;
                    cirFunction.IsSetter = methodDefinition.IsSetter;
                    cirFunction.IsGetter = methodDefinition.IsGetter;
                    cirFunction.IsRuntime = methodDefinition.IsRuntime;
                    cirFunction.IsPublic = methodDefinition.IsPublic;
                    cirFunction.IsPrivate = methodDefinition.IsPrivate;
                    cirFunction.IsPInvokeImpl = methodDefinition.IsPInvokeImpl;
                    cirFunction.IsNative = methodDefinition.IsNative;
                    cirFunction.IsManaged = methodDefinition.IsManaged;
                    cirFunction.IsInternalCall = methodDefinition.IsInternalCall;
                    cirFunction.IsIL = methodDefinition.IsIL;
                    cirFunction.IsConstructor = methodDefinition.IsConstructor;
                    cirFunction.IsAbstract = methodDefinition.IsAbstract;
                    cirFunction.HasSecurity = methodDefinition.HasSecurity;
                    cirFunction.HasBody = methodDefinition.HasBody;

                    // try to find the location of the current method by going for the first line of the first method
                    if (methodDefinition.HasBody)
                        foreach (Instruction instruction in methodDefinition.Body.Instructions)
                            if (instruction.SequencePoint != null )
                            {
                                cirFunction.File = instruction.SequencePoint.Document.Url;
                                if (instruction.SequencePoint.StartLine == 16707566) // means there is no source code ref                                
                                    cirFunction.FileLine = "0";
                                else
                                    cirFunction.FileLine = instruction.SequencePoint.StartLine.ToString();
                                break;
                            }
                    
                    // map method parameters (this could be on the MethodReference but if so we would have to check for doing it more than once:
                    foreach (ParameterDefinition parameter in methodDefinition.Parameters)
                    {
                        ICirFunctionParameter functionParameter = new CirFunctionParameter
                        {
                            ParameterName = parameter.ToString(),
                            ParameterType = parameter.ParameterType.FullName,
                            Constant = (parameter.Constant != null) ? parameter.Constant.ToString() : "",
                            HasConstant = parameter.HasConstant,
                            HasDefault = parameter.HasDefault,
                            Method = parameter.Method.ToString()
                        };

                        cirFunction.FunctionParameters.Add(functionParameter);
                    }

                    // map the calls made and the IsCalledBy                   
                    foreach (var methodCalled in CecilUtils.getMethodsCalledInsideMethod(methodDefinition))
                    {
                        ICirFunction cirCalledFunction = processMemberReference(cirData, methodCalled.memberReference, methodCalled.sequencePoint);

                        if (cirCalledFunction != null)
                        {
                            // store the fucntion called sequence
                            cirFunction.FunctionsCalled.Add(new CirFunctionCall(cirCalledFunction,methodCalled.sequencePoint)); 
                            // store the unique list of funcions called
                            if (false == cirFunction.FunctionsCalledUniqueList.Contains(cirCalledFunction))
                                cirFunction.FunctionsCalledUniqueList.Add(cirCalledFunction);

                            // map the FunctionCalled and FunctionIsCalledBy

                            var cirFunctionCall = new CirFunctionCall(cirCalledFunction, sequencePoint);
                            //cirFunction.FunctionsCalled.Add(cirFunctionCall);                            
                            cirCalledFunction.FunctionIsCalledBy.Add(cirFunctionCall);

                            
                            //if (false == cirCalledFunction.FunctionIsCalledBy.Contains(cirFunction))
                            //    cirCalledFunction.FunctionIsCalledBy.Add(cirFunction);
                        }
                    }                                       
                }
                // to implement if needed
              /*  foreach (var methodOverride in methodDefinition.Overrides)
                {
                    var name = methodOverride.GetType();
                }*/

                return cirFunction;
            }
            catch (Exception ex)
            {
                DI.log.ex(ex, "in CirFactory.processMethodDefinition", true);
                return null;
            }            
        }        
 internal string processAssemblyAndSaveAsCirDataFile(ICirData cirData, string fileToProcess, string directoryToSaveCirDataFile, bool decompileCodeIfNoPdb)
 {
     processAssemblyDefinition(cirData, fileToProcess, decompileCodeIfNoPdb);
     if (cirData.dClasses_bySignature.Count == 0)
         DI.log.error("There were no classes in created cirData file, so canceling save");
     else
     {
         Files.checkIfDirectoryExistsAndCreateIfNot(directoryToSaveCirDataFile);
         var savedFileName = Path.Combine(directoryToSaveCirDataFile,Path.GetFileName(fileToProcess) + ".CirData");
         CirDataUtils.saveSerializedO2CirDataObjectToFile(cirData, savedFileName);
         return savedFileName;
     }
     return "";
 }
 public static ICirData addO2CirDataFile(ICirDataAnalysis cirDataAnalysis, ICirData cirData)
 {
     return addO2CirDataFile(cirDataAnalysis, cirData, true /* runRemapXrefs */);
 }
        public void processAssemblyDefinition(ICirData cirData, AssemblyDefinition assemblyDefinition, string assemblyPath, bool decompileCodeIfNoPdb)
        {
            var tempSourceCodeFolder = DI.config.getTempFolderInTempDirectory("_O2_DecompiledDotNet_" + assemblyDefinition.Name.Name);
            if (cirData != null && assemblyDefinition != null)
            {                
                var typesInAssembly = CecilUtils.getTypes(assemblyDefinition);
                loadAndMapSymbols(assemblyDefinition, assemblyPath, decompileCodeIfNoPdb, tempSourceCodeFolder);
                // first map all types
                foreach (var typeInAssembly in typesInAssembly)
                    processTypeDefinition(cirData, typeInAssembly);

                //then map their interfaces
                foreach (var typeInAssembly in typesInAssembly)
                {
                    mapTypeInterfaces(cirData, typeInAssembly);                    
                }

                // finally decompile the code if needed
                /*if (decompileCodeIfNoPdb)
                {
                    var sourceCodeFolder = DI.config.getTempFolderInTempDirectory("_O2_DecompiledDotNet_" +assemblyDefinition.Name.Name);
                    foreach (var cirClass in cirData.dClasses_bySignature.Values)
                        if(cirClass.
                        new CecilDecompiler().decompile(typeInAssembly, sourceCodeFolder)
                }*/
            }
            else
                DI.log.error("in processAssemblyDefinition, either cirData or assemblyDefinition was null");
        }
 public void processAssemblyDefinition(ICirData cirData, AssemblyDefinition assemblyDefinition, string assemblyPath)
 {
     processAssemblyDefinition(cirData, assemblyDefinition, assemblyPath, false /*decompileCodeIfNoPdb*/);
 }
 public void processAssemblyDefinition(ICirData cirData, string assemblyPath, bool decompileCodeIfNoPdb)
 {
     processAssemblyDefinition(cirData, CecilUtils.getAssembly(assemblyPath), assemblyPath, decompileCodeIfNoPdb);
 }
        public static ICirData addO2CirDataFile(ICirDataAnalysis cirDataAnalysis, ICirData cirData, bool runRemapXrefs)
        {
            if (cirData == null)
                return null;
            // check for sDbId (will be needed to get data from Ounce Db
            if (!String.IsNullOrEmpty(cirDataAnalysis.sDb_Id) && cirDataAnalysis.sDb_Id != cirData.sDbId)
                DI.log.error(
                    "The O2CirData files have different Db_Ids, The rules creation will use the last one loaded:{0}",
                    cirData.sDbId);
            if (String.IsNullOrEmpty(cirDataAnalysis.sDb_Id))
                cirDataAnalysis.sDb_Id = cirData.sDbId;
            // add classes with ControlFlowGraphs to list of classes to process

            var sClasses = new List<string>(cirData.dClasses_bySignature.Keys);
            sClasses.Sort();
            //cirDataAnalysis.dCirClass.Clear();
            foreach (ICirClass ccCirClass in cirData.dClasses_bySignature.Values)
            {
                //if (ccCirClass.bClassHasMethodsWithControlFlowGraphs && false == cirDataAnalysis.dCirClass.ContainsKey(ccCirClass))
                try
                {
                    // if (false == cirDataAnalysis.dCirClass.ContainsKey(ccCirClass))
                    //     cirDataAnalysis.dCirClass.Add(ccCirClass, cirData);

                    if (false == cirDataAnalysis.dCirClass_bySignature.ContainsKey(ccCirClass.Signature))
                    {
                        cirDataAnalysis.dCirClass_bySignature.Add(ccCirClass.Signature, ccCirClass);
                        addClass(cirDataAnalysis, ccCirClass);
                        if (false == cirDataAnalysis.dCirClass.ContainsKey(ccCirClass))
                            cirDataAnalysis.dCirClass.Add(ccCirClass, cirData);
                    }
                    else
                    {
                        var classHost = cirDataAnalysis.dCirClass_bySignature[ccCirClass.Signature];
                        var classToMerge = ccCirClass;
                        mergeClasses(cirDataAnalysis, classHost, classToMerge);
                    }
                }
                catch (Exception ex)
                {
                    DI.log.debug("in addO2CirDataFile : {0}", ex.Message);
                    //DC: to-do: debug the cases where this exception is triggered
                }
            }
            /*   var methodtofind = "System.Data!System.Int32 System.Data.IDataRecord::GetOrdinal(System.String)";
               if (cirData.dFunctions_bySignature.ContainsKey(methodtofind))
               {
               }
               if (cirDataAnalysis.dCirFunction_bySignature.ContainsKey(methodtofind))
               {
               }*/

            //if (true)

            if (runRemapXrefs)
            {
                remapXrefs(cirDataAnalysis);
                showStatsOfLoadedData(cirDataAnalysis);
            }
            else                            // if we are not remapping the XRefs then remove any FunctionIsCalledBy that are there (since some might be wrong)
            {
                foreach (var cirFunction in cirData.dFunctions_bySignature.Values)
                    cirFunction.FunctionIsCalledBy = new List<ICirFunctionCall>();
            }
            
            return cirData;
        }
        public ICirClass processTypeDefinition(ICirData cirData, TypeDefinition typeDefinition)
        {
            try
            {
                var classSignature = CirFactoryUtils.getTypeUniqueSignatureFromTypeReference(typeDefinition);
                var cirClass = getCirClass(cirData, classSignature);
                
                // map attributes for this classs
                if (typeDefinition.CustomAttributes != null && typeDefinition.CustomAttributes.Count > 0)
                {
                    foreach (CustomAttribute customAttribute in typeDefinition.CustomAttributes)
                    {
                        var constructorSignature = CirFactoryUtils.getFunctionUniqueSignatureFromMethodReference(customAttribute.Constructor);                        
                        var cirAttribute = new CirAttribute(constructorSignature);
                        foreach (var constructorParameter in customAttribute.ConstructorParameters)
                        {
//                            var type = constructorParameter.GetType().FullName;
                            cirAttribute.Parameters.Add(constructorParameter.ToString(), constructorParameter.GetType().FullName);
                        }
                        if (customAttribute.Fields.Count > 0 || customAttribute.Properties.Count > 0)
                        { 
                        }
                        cirClass.ClassAttributes.Add(cirAttribute);
                    }
                }

                
                if (false == cirClass.HasBeenProcessedByCirFactory)
                {
                    cirClass.HasBeenProcessedByCirFactory = true;
                    cirClass.Name = typeDefinition.Name;
                    cirClass.FullName = typeDefinition.FullName;
                    cirClass.Module = typeDefinition.Module.Name;
                    cirClass.Namespace = cirClass.Namespace;
                    cirClass.SymbolDef = Guid.NewGuid().ToString();
                    cirClass.IsAbstract = typeDefinition.IsAbstract;
                    //                cirClass.IsAnonymous = typeDefinition.
                    cirClass.IsClass = typeDefinition.IsClass;
                    cirClass.IsEnum = typeDefinition.IsEnum;
                    cirClass.IsInterface = typeDefinition.IsInterface;
                    cirClass.IsImport = typeDefinition.IsImport;
                    cirClass.IsNotPublic = typeDefinition.IsNotPublic;
                    cirClass.IsPublic = typeDefinition.IsPublic;
                    cirClass.HasSecurity = typeDefinition.HasSecurity;             
                }
                else
                    DI.log.info("This Class has already been processed, so only adding any possible extra methods: {0}", cirClass.Name);
                // handle constuctors

                foreach (MethodDefinition methodDefinition in typeDefinition.Constructors)
                {
                    ICirFunction cirFunction = processMethodDefinition(cirData, methodDefinition, null);
                    if (false == cirClass.dFunctions.ContainsValue(cirFunction))
                        cirClass.dFunctions.Add(cirFunction.FunctionSignature, cirFunction);

                    // try to find source code reference
                    if (cirFunction.FunctionsCalled.Count > 0 && cirClass.FileLine == null)
                        if (false == string.IsNullOrEmpty(cirFunction.FunctionsCalled[0].fileName))
                        {
                            cirClass.File = cirFunction.FunctionsCalled[0].fileName;
                            cirClass.FileLine = "0";    // set it to zero and try to map it later
                        }
                }
                // handle methods
                foreach (MethodDefinition methodDefinition in typeDefinition.Methods)
                {
                    ICirFunction cirFunction = processMethodDefinition(cirData, methodDefinition, null);
                    if (false == cirClass.dFunctions.ContainsValue(cirFunction))
                        cirClass.dFunctions.Add(cirFunction.FunctionSignature, cirFunction);

                }                
                return cirClass;
            }
            catch (Exception ex)
            {
                DI.log.ex(ex, "in CirFactory.processTypeDefinition", true);
                return null;
            }
        }