diff --git a/snapshot/fuchsia/process_reader_fuchsia.h b/snapshot/fuchsia/process_reader_fuchsia.h
index 28a1e93..36201af 100644
--- a/snapshot/fuchsia/process_reader_fuchsia.h
+++ b/snapshot/fuchsia/process_reader_fuchsia.h
@@ -109,7 +109,7 @@
   const std::vector<Thread>& Threads();
 
   //! \brief Return a memory reader for the target process.
-  ProcessMemory* Memory() { return process_memory_.get(); }
+  const ProcessMemory* Memory() const { return process_memory_.get(); }
 
  private:
   //! Performs lazy initialization of the \a modules_ vector on behalf of
diff --git a/snapshot/fuchsia/process_snapshot_fuchsia.cc b/snapshot/fuchsia/process_snapshot_fuchsia.cc
index 6750c3d..12122f6 100644
--- a/snapshot/fuchsia/process_snapshot_fuchsia.cc
+++ b/snapshot/fuchsia/process_snapshot_fuchsia.cc
@@ -188,6 +188,11 @@
   return std::vector<const MemorySnapshot*>();
 }
 
+const ProcessMemory* ProcessSnapshotFuchsia::Memory() const {
+  INITIALIZATION_STATE_DCHECK_VALID(initialized_);
+  return process_reader_.Memory();
+}
+
 void ProcessSnapshotFuchsia::InitializeThreads() {
   const std::vector<ProcessReaderFuchsia::Thread>& process_reader_threads =
       process_reader_.Threads();
diff --git a/snapshot/fuchsia/process_snapshot_fuchsia.h b/snapshot/fuchsia/process_snapshot_fuchsia.h
index 237e17d..15c3bb7 100644
--- a/snapshot/fuchsia/process_snapshot_fuchsia.h
+++ b/snapshot/fuchsia/process_snapshot_fuchsia.h
@@ -121,6 +121,7 @@
   std::vector<const MemoryMapRegionSnapshot*> MemoryMap() const override;
   std::vector<HandleSnapshot> Handles() const override;
   std::vector<const MemorySnapshot*> ExtraMemory() const override;
+  const ProcessMemory* Memory() const override;
 
  private:
   // Initializes threads_ on behalf of Initialize().
diff --git a/snapshot/linux/process_reader_linux.h b/snapshot/linux/process_reader_linux.h
index dbe436a..1b30f53 100644
--- a/snapshot/linux/process_reader_linux.h
+++ b/snapshot/linux/process_reader_linux.h
@@ -120,7 +120,7 @@
   pid_t ParentProcessID() const { return process_info_.ParentProcessID(); }
 
   //! \brief Return a memory reader for the target process.
-  ProcessMemory* Memory() { return connection_->Memory(); }
+  const ProcessMemory* Memory() const { return connection_->Memory(); }
 
   //! \brief Return a memory map of the target process.
   MemoryMap* GetMemoryMap() { return &memory_map_; }
diff --git a/snapshot/linux/process_snapshot_linux.cc b/snapshot/linux/process_snapshot_linux.cc
index 190e869..041653a 100644
--- a/snapshot/linux/process_snapshot_linux.cc
+++ b/snapshot/linux/process_snapshot_linux.cc
@@ -234,6 +234,11 @@
   return std::vector<const MemorySnapshot*>();
 }
 
+const ProcessMemory* ProcessSnapshotLinux::Memory() const {
+  INITIALIZATION_STATE_DCHECK_VALID(initialized_);
+  return process_reader_.Memory();
+}
+
 void ProcessSnapshotLinux::InitializeThreads() {
   const std::vector<ProcessReaderLinux::Thread>& process_reader_threads =
       process_reader_.Threads();
diff --git a/snapshot/linux/process_snapshot_linux.h b/snapshot/linux/process_snapshot_linux.h
index 49d648f..236926d 100644
--- a/snapshot/linux/process_snapshot_linux.h
+++ b/snapshot/linux/process_snapshot_linux.h
@@ -115,6 +115,7 @@
   std::vector<const MemoryMapRegionSnapshot*> MemoryMap() const override;
   std::vector<HandleSnapshot> Handles() const override;
   std::vector<const MemorySnapshot*> ExtraMemory() const override;
+  const ProcessMemory* Memory() const override;
 
  private:
   void InitializeThreads();
diff --git a/snapshot/mac/process_snapshot_mac.cc b/snapshot/mac/process_snapshot_mac.cc
index cf5233a..68837ff 100644
--- a/snapshot/mac/process_snapshot_mac.cc
+++ b/snapshot/mac/process_snapshot_mac.cc
@@ -217,6 +217,12 @@
   return std::vector<const MemorySnapshot*>();
 }
 
+const ProcessMemory* ProcessSnapshotMac::Memory() const {
+  INITIALIZATION_STATE_DCHECK_VALID(initialized_);
+  NOTREACHED();  // https://crashpad.chromium.org/bug/263
+  return nullptr;
+}
+
 void ProcessSnapshotMac::InitializeThreads() {
   const std::vector<ProcessReaderMac::Thread>& process_reader_threads =
       process_reader_.Threads();
diff --git a/snapshot/mac/process_snapshot_mac.h b/snapshot/mac/process_snapshot_mac.h
index 06bac74..2edc222 100644
--- a/snapshot/mac/process_snapshot_mac.h
+++ b/snapshot/mac/process_snapshot_mac.h
@@ -131,6 +131,7 @@
   std::vector<const MemoryMapRegionSnapshot*> MemoryMap() const override;
   std::vector<HandleSnapshot> Handles() const override;
   std::vector<const MemorySnapshot*> ExtraMemory() const override;
+  const ProcessMemory* Memory() const override;
 
  private:
   // Initializes threads_ on behalf of Initialize().
diff --git a/snapshot/minidump/process_snapshot_minidump.cc b/snapshot/minidump/process_snapshot_minidump.cc
index 1273843..5cc5ad8 100644
--- a/snapshot/minidump/process_snapshot_minidump.cc
+++ b/snapshot/minidump/process_snapshot_minidump.cc
@@ -229,6 +229,11 @@
   return std::vector<const MemorySnapshot*>();
 }
 
+const ProcessMemory* ProcessSnapshotMinidump::Memory() const {
+  INITIALIZATION_STATE_DCHECK_VALID(initialized_);
+  return nullptr;
+}
+
 bool ProcessSnapshotMinidump::InitializeCrashpadInfo() {
   const auto& stream_it = stream_map_.find(kMinidumpStreamTypeCrashpadInfo);
   if (stream_it == stream_map_.end()) {
diff --git a/snapshot/minidump/process_snapshot_minidump.h b/snapshot/minidump/process_snapshot_minidump.h
index 3f25618..2a868a1 100644
--- a/snapshot/minidump/process_snapshot_minidump.h
+++ b/snapshot/minidump/process_snapshot_minidump.h
@@ -81,6 +81,7 @@
   std::vector<const MemoryMapRegionSnapshot*> MemoryMap() const override;
   std::vector<HandleSnapshot> Handles() const override;
   std::vector<const MemorySnapshot*> ExtraMemory() const override;
+  const ProcessMemory* Memory() const override;
 
  private:
   // Initializes data carried in a MinidumpCrashpadInfo stream on behalf of
diff --git a/snapshot/process_snapshot.h b/snapshot/process_snapshot.h
index 8d5520c..f5859d2 100644
--- a/snapshot/process_snapshot.h
+++ b/snapshot/process_snapshot.h
@@ -31,6 +31,7 @@
 class MemoryMapRegionSnapshot;
 class MemorySnapshot;
 class ModuleSnapshot;
+class ProcessMemory;
 class SystemSnapshot;
 class ThreadSnapshot;
 class UnloadedModuleSnapshot;
@@ -193,6 +194,14 @@
   //!     are scoped to the lifetime of the ProcessSnapshot object that they
   //!     were obtained from.
   virtual std::vector<const MemorySnapshot*> ExtraMemory() const = 0;
+
+  //! \brief Returns a ProcessMemory object that allows accessing the process'
+  //!     memory directly.
+  //!
+  //! \return A ProcessMemory object. The caller does not take ownership of this
+  //!     object, it is scoped to the lifetime of the ProcessSnapshot object
+  //!     that it was obtained from.
+  virtual const ProcessMemory* Memory() const = 0;
 };
 
 }  // namespace crashpad
diff --git a/snapshot/sanitized/process_snapshot_sanitized.cc b/snapshot/sanitized/process_snapshot_sanitized.cc
index 76caeb5..20807b9 100644
--- a/snapshot/sanitized/process_snapshot_sanitized.cc
+++ b/snapshot/sanitized/process_snapshot_sanitized.cc
@@ -262,4 +262,10 @@
   return snapshot_->ExtraMemory();
 }
 
+const ProcessMemory* ProcessSnapshotSanitized::Memory() const {
+  INITIALIZATION_STATE_DCHECK_VALID(initialized_);
+  NOTREACHED();  // https://crashpad.chromium.org/bug/263
+  return nullptr;
+}
+
 }  // namespace crashpad
diff --git a/snapshot/sanitized/process_snapshot_sanitized.h b/snapshot/sanitized/process_snapshot_sanitized.h
index f5cf5fa..b5f0c40 100644
--- a/snapshot/sanitized/process_snapshot_sanitized.h
+++ b/snapshot/sanitized/process_snapshot_sanitized.h
@@ -83,6 +83,7 @@
   std::vector<const MemoryMapRegionSnapshot*> MemoryMap() const override;
   std::vector<HandleSnapshot> Handles() const override;
   std::vector<const MemorySnapshot*> ExtraMemory() const override;
+  const ProcessMemory* Memory() const override;
 
  private:
   // Only used when annotations_whitelist_ != nullptr.
diff --git a/snapshot/test/test_process_snapshot.cc b/snapshot/test/test_process_snapshot.cc
index c430fd9..1a31370 100644
--- a/snapshot/test/test_process_snapshot.cc
+++ b/snapshot/test/test_process_snapshot.cc
@@ -35,7 +35,8 @@
       exception_(),
       memory_map_(),
       handles_(),
-      extra_memory_() {
+      extra_memory_(),
+      process_memory_() {
 }
 
 TestProcessSnapshot::~TestProcessSnapshot() {
@@ -126,5 +127,9 @@
   return extra_memory;
 }
 
+const ProcessMemory* TestProcessSnapshot::Memory() const {
+  return process_memory_.get();
+}
+
 }  // namespace test
 }  // namespace crashpad
diff --git a/snapshot/test/test_process_snapshot.h b/snapshot/test/test_process_snapshot.h
index 5c63e12..bfa26ab 100644
--- a/snapshot/test/test_process_snapshot.h
+++ b/snapshot/test/test_process_snapshot.h
@@ -35,6 +35,7 @@
 #include "snapshot/thread_snapshot.h"
 #include "snapshot/unloaded_module_snapshot.h"
 #include "util/misc/uuid.h"
+#include "util/process/process_memory.h"
 
 namespace crashpad {
 namespace test {
@@ -134,6 +135,15 @@
     extra_memory_.push_back(std::move(extra_memory));
   }
 
+  //! \brief Add a process memory object to be returned by Memory().
+  //!
+  //! \param[in] process_memory The memory object that will be returned by
+  //!     Memory(). The TestProcessSnapshot object takes ownership of \a
+  //!     extra_memory.
+  void SetProcessMemory(std::unique_ptr<ProcessMemory> process_memory) {
+    process_memory_ = std::move(process_memory);
+  }
+
   // ProcessSnapshot:
 
   pid_t ProcessID() const override;
@@ -153,6 +163,7 @@
   std::vector<const MemoryMapRegionSnapshot*> MemoryMap() const override;
   std::vector<HandleSnapshot> Handles() const override;
   std::vector<const MemorySnapshot*> ExtraMemory() const override;
+  const ProcessMemory* Memory() const override;
 
  private:
   pid_t process_id_;
@@ -172,6 +183,7 @@
   std::vector<std::unique_ptr<MemoryMapRegionSnapshot>> memory_map_;
   std::vector<HandleSnapshot> handles_;
   std::vector<std::unique_ptr<MemorySnapshot>> extra_memory_;
+  std::unique_ptr<ProcessMemory> process_memory_;
 
   DISALLOW_COPY_AND_ASSIGN(TestProcessSnapshot);
 };
diff --git a/snapshot/win/process_snapshot_win.cc b/snapshot/win/process_snapshot_win.cc
index 7f1f93a..af6fe4d 100644
--- a/snapshot/win/process_snapshot_win.cc
+++ b/snapshot/win/process_snapshot_win.cc
@@ -232,6 +232,11 @@
   return extra_memory;
 }
 
+const ProcessMemory* ProcessSnapshotWin::Memory() const {
+  INITIALIZATION_STATE_DCHECK_VALID(initialized_);
+  return process_reader_.Memory();
+}
+
 void ProcessSnapshotWin::InitializeThreads(
     bool gather_indirectly_referenced_memory,
     uint32_t indirectly_referenced_memory_cap) {
diff --git a/snapshot/win/process_snapshot_win.h b/snapshot/win/process_snapshot_win.h
index 9250c13..092aaf1 100644
--- a/snapshot/win/process_snapshot_win.h
+++ b/snapshot/win/process_snapshot_win.h
@@ -129,6 +129,7 @@
   std::vector<const MemoryMapRegionSnapshot*> MemoryMap() const override;
   std::vector<HandleSnapshot> Handles() const override;
   std::vector<const MemorySnapshot*> ExtraMemory() const override;
+  const ProcessMemory* Memory() const override;
 
  private:
   // Initializes threads_ on behalf of Initialize().
