Exemplo n.º 1
0
        public void AssignPageRank(AsmAdjancyGraph g)
        {
            if (g.St == MetadataTokenStatus.Error)
            {
                return;
            }
            if (g.Asms == null || !g.Asms.Any())
            {
                return;
            }
            if (g.Graph == null)
            {
                return;
            }
            var keepTemp = ResolveBool(SysCfg.GetAppCfgSetting(APP_SET_KEY_KEEP_TEMP)) ?? false;

            Efx.RTempDir = LogDirectory;
            var pageRank = Efx.GetPageRank(g.Graph, keepTemp);

            if (pageRank == null || !pageRank.Any())
            {
                return;
            }
            for (var i = 0; i < g.Asms.Length; i++)
            {
                var asm = g.Asms.FirstOrDefault(x => x.IndexId == i);
                if (asm == null)
                {
                    continue;
                }
                asm.PageRank = pageRank[i];
            }
        }
Exemplo n.º 2
0
        public static AsmAdjancyGraph GetDpxAdjGraph(string binDir)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(binDir) || !Directory.Exists(binDir))
                {
                    var asmAdjGraph = new AsmAdjancyGraph
                    {
                        Msg = $"The bin directory {binDir} is null or does not exist.",
                        St = MetadataTokenStatus.Error
                    };
                    return asmAdjGraph;
                }

                //get all the dll files in the dir
                var di = new DirectoryInfo(binDir);
                var dllsFullNames =
                    di.EnumerateFileSystemInfos("*.dll", SearchOption.TopDirectoryOnly).Select(x => x.FullName).ToArray();

                if (!dllsFullNames.Any())
                {
                    var asmAdjGraph = new AsmAdjancyGraph
                    {
                        Msg = $"The directory {binDir} does not contain any files with a .dll extension.",
                        St = MetadataTokenStatus.Error
                    };
                    return asmAdjGraph;
                }

                //get all the assembly names of direct files and each of thier ref's
                var asmIndxBuffer = new List<Tuple<RankedMetadataTokenAsm, RankedMetadataTokenAsm[]>>();
                foreach (var dll in dllsFullNames)
                {
                    var asmName = AssemblyName.GetAssemblyName(dll);
                    if (asmName == null)
                        continue;
                    var asm = Asm.NfLoadFrom(dll);
                    var refs = asm.GetReferencedAssemblies().ToArray();
                    var mdta = new RankedMetadataTokenAsm
                    {
                        AssemblyName = asm.GetName().FullName,
                        IndexId = -1,
                        DllFullName = dll,
                        HasPdb = File.Exists(Path.ChangeExtension(dll, "pdb"))
                    };
                    asmIndxBuffer.Add(new Tuple<RankedMetadataTokenAsm, RankedMetadataTokenAsm[]>(mdta,
                        refs.Select(x => new RankedMetadataTokenAsm { AssemblyName = x.FullName, IndexId = -2}).ToArray()));
                }
                return GetDpxAdjGraph(asmIndxBuffer);

            }
            catch (Exception ex)
            {
                return new AsmAdjancyGraph {Msg = ex.Message, St = MetadataTokenStatus.Error};
            }
        }
Exemplo n.º 3
0
        internal static AsmAdjancyGraph GetDpxAdjGraph(
            List <Tuple <RankedMetadataTokenAsm, RankedMetadataTokenAsm[]> > asmIndxBuffer)
        {
            //flatten all of them to a unique list
            var uqAsmIndices = asmIndxBuffer.Select(x => x.Item1).ToList();

            uqAsmIndices.AddRange(asmIndxBuffer.SelectMany(x => x.Item2));
            uqAsmIndices = uqAsmIndices.Distinct().ToList();
            for (var i = 0; i < uqAsmIndices.Count; i++)
            {
                uqAsmIndices[i].IndexId = i;
            }

            //create adj graph
            var adjGraph = new int[uqAsmIndices.Count, uqAsmIndices.Count];

            for (var i = 0; i < uqAsmIndices.Count; i++)
            {
                var iMdta    = uqAsmIndices.First(x => x.IndexId == i);
                var mdtaRefs = asmIndxBuffer.FirstOrDefault(x => x.Item1.Equals(iMdta))?.Item2 ??
                               new RankedMetadataTokenAsm[0];

                for (var j = 0; j < uqAsmIndices.Count; j++)
                {
                    if (i == j)
                    {
                        continue;
                    }
                    var jMdta   = uqAsmIndices.First(x => x.IndexId == j);
                    var hadEdge = mdtaRefs.Any(x => x.Equals(jMdta));
                    adjGraph[i, j] = hadEdge ? 1 : 0;
                }
            }
            //assign and return
            var asmAdjGraph = new AsmAdjancyGraph
            {
                Asms  = uqAsmIndices.ToArray(),
                Graph = adjGraph,
                St    = MetadataTokenStatus.Ok
            };

            return(asmAdjGraph);
        }
Exemplo n.º 4
0
 public void AssignPageRank(AsmAdjancyGraph g)
 {
     if (g.St == MetadataTokenStatus.Error)
         return;
     if (g.Asms == null || !g.Asms.Any())
         return;
     if (g.Graph == null)
         return;
     var keepTemp = ResolveBool(ConfigurationManager.AppSettings[APP_SET_KEY_KEEP_TEMP]) ?? false;
     Re.Efx.RTempDir = LogDirectory;
     var pageRank = Re.Efx.GetPageRank(g.Graph, keepTemp);
     if (pageRank == null || !pageRank.Any())
         return;
     for (var i = 0; i < g.Asms.Length; i++)
     {
         var asm = g.Asms.FirstOrDefault(x => x.IndexId == i);
         if (asm == null)
             continue;
         asm.PageRank = pageRank[i];
     }
 }
Exemplo n.º 5
0
        public static AsmAdjancyGraph GetDpxAdjGraph(string binDir)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(binDir) || !Directory.Exists(binDir))
                {
                    var asmAdjGraph = new AsmAdjancyGraph
                    {
                        Msg = $"The bin directory {binDir} is null or does not exist.",
                        St  = MetadataTokenStatus.Error
                    };
                    return(asmAdjGraph);
                }

                //get all the dll files in the dir
                var di            = new DirectoryInfo(binDir);
                var dllsFullNames =
                    di.EnumerateFileSystemInfos("*.dll", SearchOption.TopDirectoryOnly).Select(x => x.FullName).ToArray();

                if (!dllsFullNames.Any())
                {
                    var asmAdjGraph = new AsmAdjancyGraph
                    {
                        Msg = $"The directory {binDir} does not contain any files with a .dll extension.",
                        St  = MetadataTokenStatus.Error
                    };
                    return(asmAdjGraph);
                }

                //get all the assembly names of direct files and each of thier ref's
                var asmIndxBuffer = new List <Tuple <RankedMetadataTokenAsm, RankedMetadataTokenAsm[]> >();
                foreach (var dll in dllsFullNames)
                {
                    var asmName = AssemblyName.GetAssemblyName(dll);
                    if (asmName == null)
                    {
                        continue;
                    }
                    var asm  = Asm.NfLoadFrom(dll);
                    var refs = asm.GetReferencedAssemblies().ToArray();
                    var mdta = new RankedMetadataTokenAsm
                    {
                        AssemblyName = asm.GetName().FullName,
                        IndexId      = -1,
                        DllFullName  = dll,
                        HasPdb       = File.Exists(Path.ChangeExtension(dll, "pdb"))
                    };
                    asmIndxBuffer.Add(new Tuple <RankedMetadataTokenAsm, RankedMetadataTokenAsm[]>(mdta,
                                                                                                   refs.Select(x => new RankedMetadataTokenAsm {
                        AssemblyName = x.FullName, IndexId = -2
                    }).ToArray()));
                }
                return(GetDpxAdjGraph(asmIndxBuffer));
            }
            catch (Exception ex)
            {
                return(new AsmAdjancyGraph {
                    Msg = ex.Message, St = MetadataTokenStatus.Error
                });
            }
        }
Exemplo n.º 6
0
        internal static AsmAdjancyGraph GetDpxAdjGraph(
            List<Tuple<RankedMetadataTokenAsm, RankedMetadataTokenAsm[]>> asmIndxBuffer)
        {
            //flatten all of them to a unique list
            var uqAsmIndices = asmIndxBuffer.Select(x => x.Item1).ToList();
            uqAsmIndices.AddRange(asmIndxBuffer.SelectMany(x => x.Item2));
            uqAsmIndices = uqAsmIndices.Distinct().ToList();
            for (var i = 0; i < uqAsmIndices.Count; i++)
            {
                uqAsmIndices[i].IndexId = i;
            }

            //create adj graph
            var adjGraph = new int[uqAsmIndices.Count, uqAsmIndices.Count];
            for (var i = 0; i < uqAsmIndices.Count; i++)
            {
                var iMdta = uqAsmIndices.First(x => x.IndexId == i);
                var mdtaRefs = asmIndxBuffer.FirstOrDefault(x => x.Item1.Equals(iMdta))?.Item2 ??
                               new RankedMetadataTokenAsm[0];

                for (var j = 0; j < uqAsmIndices.Count; j++)
                {
                    if (i == j)
                        continue;
                    var jMdta = uqAsmIndices.First(x => x.IndexId == j);
                    var hadEdge = mdtaRefs.Any(x => x.Equals(jMdta));
                    adjGraph[i, j] = hadEdge ? 1 : 0;
                }
            }
            //assign and return
            var asmAdjGraph = new AsmAdjancyGraph
            {
                Asms = uqAsmIndices.ToArray(),
                Graph = adjGraph,
                St = MetadataTokenStatus.Ok
            };

            return asmAdjGraph;
        }