AddressSpace::ReadMode mode)
{
mc_mem_region_t region = mc_get_snapshot_region((void*)address, this, process_index);
- if (region)
- return MC_region_read(region, buffer, (void*)address, size);
+ if (region) {
+ const void* res = MC_region_read(region, buffer, (void*)address, size);
+ if (buffer == res || mode == AddressSpace::Lazy)
+ return res;
+ else {
+ memcpy(buffer, res, size);
+ return buffer;
+ }
+ }
else
return MC_process_read(this->process, mode, buffer, (void*)address, size, process_index);
}