Ejemplo n.º 1
0
        private static void Search(DiagnosticAnalyzer analyzer, ulong leakedAddress)
        {
            var roots = analyzer.RootPaths(leakedAddress);

            // get the statics being kept by some static field
            var staticRoots = roots
                              .Where(r => r.Root.IsPinned && r.Root.Object.Type.Name == "System.Object[]")
                              .SelectMany(r => r.Path.Skip(1).Take(1))
                              .ToList();

            var addressesToSearch = staticRoots
                                    .Select(a => a.Address)
                                    .ToList();


            var all           = analyzer.Objects;
            var mainAppDomain = analyzer.MainAppDomain;

            foreach (var obj in all)
            {
                foreach (var staticField in obj.Type.StaticFields)
                {
                    var staticFieldAddress = staticField.Read <ulong>(mainAppDomain);
                    if (addressesToSearch.Contains(staticFieldAddress))
                    {
                        Console.WriteLine($"{obj.Address:16X} {obj.Type.Name}");
                        Console.WriteLine($"  Field: {staticField.Name}");
                    }
                }
            }
        }