Skip to content

Instantly share code, notes, and snippets.

@kevingosse
Last active March 1, 2017 12:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kevingosse/8a1a2551db353980bb29a9e1fe26ae08 to your computer and use it in GitHub Desktop.
Save kevingosse/8a1a2551db353980bb29a9e1fe26ae08 to your computer and use it in GitHub Desktop.
var dataTarget = DataTarget.LoadCrashDump(path);
var runtime = dataTarget.ClrVersions[0].CreateRuntime(Path.Combine(folder, "mscordacwks.dll"));
var heap = runtime.GetHeap();
ClrInstanceField field = null;
var targets = new List<string>();
foreach (var address in heap.EnumerateObjectAddresses())
{
var type = heap.GetObjectType(address);
if (type.Name == "System.Threading.TimerCallback")
{
if (field == null)
{
field = type.Fields.First(f => f.Name == "_target");
}
var targetAddress = (ulong)field.GetValue(address);
var target = heap.GetObjectType(targetAddress);
targets.Add(target.Name);
}
}
foreach (var group in targets.GroupBy(t => t).OrderByDescending(g => g.Count()))
{
Console.WriteLine("{0}\t{1}", group.Key, group.Count());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment