Skip to content

Commit 22e7edb

Browse files
committed
Bring back the memory reader for heap enumeration
Some malloc replacements don't provide a default reader
1 parent 52fcda5 commit 22e7edb

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

Classes/Utility/FLEXHeapEnumerator.m

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,12 @@ static void range_callback(task_t task, void *context, unsigned type, vm_range_t
4545
}
4646
}
4747

48+
static kern_return_t reader(__unused task_t remote_task, vm_address_t remote_address, __unused vm_size_t size, void **local_memory)
49+
{
50+
*local_memory = (void *)remote_address;
51+
return KERN_SUCCESS;
52+
}
53+
4854
+ (void)enumerateLiveObjectsUsingBlock:(flex_object_enumeration_block_t)block
4955
{
5056
if (!block) {
@@ -60,13 +66,13 @@ + (void)enumerateLiveObjectsUsingBlock:(flex_object_enumeration_block_t)block
6066

6167
vm_address_t *zones = NULL;
6268
unsigned int zoneCount = 0;
63-
kern_return_t result = malloc_get_all_zones(TASK_NULL, NULL, &zones, &zoneCount);
69+
kern_return_t result = malloc_get_all_zones(TASK_NULL, reader, &zones, &zoneCount);
6470

6571
if (result == KERN_SUCCESS) {
6672
for (unsigned int i = 0; i < zoneCount; i++) {
6773
malloc_zone_t *zone = (malloc_zone_t *)zones[i];
6874
if (zone->introspect && zone->introspect->enumerator) {
69-
zone->introspect->enumerator(TASK_NULL, (__bridge void *)block, MALLOC_PTR_IN_USE_RANGE_TYPE, (vm_address_t)zone, NULL, &range_callback);
75+
zone->introspect->enumerator(TASK_NULL, (__bridge void *)block, MALLOC_PTR_IN_USE_RANGE_TYPE, (vm_address_t)zone, reader, &range_callback);
7076
}
7177
}
7278
}

0 commit comments

Comments
 (0)