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}"); } } } }