예제 #1
0
// 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;
}
예제 #2
0
Zone::Zone(task_t task, memory_reader_t reader, vm_address_t remotePointer)
{
    remoteRead(task, reader, remotePointer, *this);
}