Exemplo n.º 1
0
/** Compare memory between snapshots
 *
 * @param addr1 Address in the first snapshot
 * @param snapshot1 First snapshot
 * @param addr2 Address in the second snapshot
 * @param snapshot2 Second snapshot
 * @return same as memcmp
 * */
int MC_snapshot_memcmp(
  const void* addr1, mc_snapshot_t snapshot1,
  const void* addr2, mc_snapshot_t snapshot2, int process_index, size_t size)
{
  mc_mem_region_t region1 = mc_get_snapshot_region(addr1, snapshot1, process_index);
  mc_mem_region_t region2 = mc_get_snapshot_region(addr2, snapshot2, process_index);
  return MC_snapshot_region_memcmp(addr1, region1, addr2, region2, size);
}
Exemplo n.º 2
0
const void* Snapshot::read_bytes(void* buffer, std::size_t size, RemotePtr<void> address, int process_index,
                                 ReadOptions options) const
{
  mc_mem_region_t region = mc_get_snapshot_region((void*)address.address(), this, process_index);
  if (region) {
    const void* res = MC_region_read(region, buffer, (void*)address.address(), size);
    if (buffer == res || options & ReadOptions::lazy())
      return res;
    else {
      memcpy(buffer, res, size);
      return buffer;
    }
  } else
    return this->process()->read_bytes(buffer, size, address, process_index, options);
}
Exemplo n.º 3
0
const void* Snapshot::read_bytes(void* buffer, std::size_t size,
  remote_ptr<void> address, int process_index,
  AddressSpace::ReadMode mode) const
{
  mc_mem_region_t region = mc_get_snapshot_region((void*)address.address(), this, process_index);
  if (region) {
    const void* res = MC_region_read(region, buffer, (void*)address.address(), size);
    if (buffer == res || mode == AddressSpace::Lazy)
      return res;
    else {
      memcpy(buffer, res, size);
      return buffer;
    }
  }
  else
    return this->process()->read_bytes(
      buffer, size, address, process_index, mode);
}