예제 #1
0
        private IEnumerable <ulong> EnumerateObjectsOfTypes(ulong start, ulong stop, HashSet <string> types)
        {
            ClrHeap heap = _runtime.Heap;

            foreach (ulong ptr in EnumeratePointersInRange(start, stop))
            {
                if (_runtime.ReadPointer(ptr, out ulong obj))
                {
                    if (heap.IsInHeap(obj))
                    {
                        ClrType type = heap.GetObjectType(obj);

                        int sanity = 0;
                        while (type != null)
                        {
                            if (types.Contains(type.Name))
                            {
                                yield return(obj);

                                break;
                            }

                            type = type.BaseType;

                            if (sanity++ == 16)
                            {
                                break;
                            }
                        }
                    }
                }
            }
        }