Exemple #1
0
 CFG(Analysis analysis)
     : base()
 {
     _cfa      = new CFA(this);
     _analysis = analysis;
 }
Exemple #2
0
        public void Add(Mono.Cecil.MethodDefinition definition)
        {
            // Do not analyze Campy modules generally...
            if (Options.Singleton.Get(Options.OptionType.DoNotAnalyzeCampyAssemblies))
            {
                if (definition.Module != null && Analysis.IsCampyModuleName(definition.Module.Name))
                {
                    return;
                }
            }

            if (_done.Contains(definition))
            {
                return;
            }
            if (_to_do.Contains(definition))
            {
                return;
            }

            bool ignore = false;

            foreach (KeyValuePair <String, String> pair in _analysis._filter)
            {
                String pat = pair.Key;
                String ty  = pair.Value;

                // Match based on type "ty".
                if (ty.Equals("-method"))
                {
                    // match on name/parameters.
                    Regex  reg = new Regex(@"^" + pat + @"$");
                    String def = definition.ToString();
                    Match  m   = reg.Match(def);
                    int    ind = m.Index;
                    int    l   = m.Length;
                    if (!(ind >= 0 && l > 0))
                    {
                        continue;
                    }
                    ignore = true;
                    break;
                }
                else if (ty.Equals("+method"))
                {
                    // match on name/parameters.
                    Regex  reg = new Regex(@"^" + pat + @"$");
                    String def = definition.ToString();
                    Match  m   = reg.Match(def);
                    int    ind = m.Index;
                    int    l   = m.Length;
                    if (!(ind >= 0 && l > 0))
                    {
                        continue;
                    }
                    ignore = false;
                    break;
                }
                else if (ty.Equals("-namespace"))
                {
                    // match on name/parameters.
                    Regex  reg = new Regex(@"^" + pat + @"$");
                    String def = definition.DeclaringType.Namespace.ToString();
                    Match  m   = reg.Match(def);
                    int    ind = m.Index;
                    int    l   = m.Length;
                    if (!(ind >= 0 && l > 0))
                    {
                        continue;
                    }
                    ignore = true;
                    break;
                }
                else if (ty.Equals("+namespace"))
                {
                    // match on name/parameters.
                    Regex  reg = new Regex(@"^" + pat + @"$");
                    String def = definition.DeclaringType.Namespace.ToString();
                    Match  m   = reg.Match(def);
                    int    ind = m.Index;
                    int    l   = m.Length;
                    if (!(ind >= 0 && l > 0))
                    {
                        continue;
                    }
                    ignore = false;
                    break;
                }
                else if (ty.Equals("-assembly"))
                {
                    // match on name/parameters.
                    Regex  reg = new Regex(@"^" + pat + @"$");
                    String def = definition.Module.Assembly.ToString();
                    Match  m   = reg.Match(def);
                    int    ind = m.Index;
                    int    l   = m.Length;
                    if (!(ind >= 0 && l > 0))
                    {
                        continue;
                    }
                    ignore = true;
                    break;
                }
                else if (ty.Equals("+assembly"))
                {
                    // match on name/parameters.
                    Regex  reg = new Regex(@"^" + pat + @"$");
                    String def = definition.Module.Assembly.ToString();
                    Match  m   = reg.Match(def);
                    int    ind = m.Index;
                    int    l   = m.Length;
                    if (!(ind >= 0 && l > 0))
                    {
                        continue;
                    }
                    ignore = false;
                    break;
                }
            }

            if (Options.Singleton.Get(Options.OptionType.DisplaySSAComputation))
            {
                System.Console.WriteLine((ignore ? "Ignoring " : "Adding ") + definition);
            }
            if (ignore)
            {
                return;
            }
            _to_do.Push(definition);
        }