// This function runs inside the leaks process. static kern_return_t enumerator(task_t task, void* context, unsigned type_mask, vm_address_t zone_address, memory_reader_t reader, vm_range_recorder_t recorder) { Zone remoteZone; remoteRead(task, reader, zone_address, remoteZone); for (auto* superChunk : remoteZone.superChunks()) { vm_range_t range = { reinterpret_cast<vm_address_t>(superChunk), superChunkSize }; if ((type_mask & MALLOC_PTR_REGION_RANGE_TYPE)) (*recorder)(task, context, MALLOC_PTR_REGION_RANGE_TYPE, &range, 1); if ((type_mask & MALLOC_PTR_IN_USE_RANGE_TYPE)) (*recorder)(task, context, MALLOC_PTR_IN_USE_RANGE_TYPE, &range, 1); } return 0; }
Zone::Zone(task_t task, memory_reader_t reader, vm_address_t remotePointer) { remoteRead(task, reader, remotePointer, *this); }