diff --git a/sample_proc.py b/sample_proc.py
index 548edc3c5596335124b27904d65da7b4fa7624bf..a536f12ce758a8712c899b5fd4a1e32cb61264ff 100755
--- a/sample_proc.py
+++ b/sample_proc.py
@@ -11,7 +11,7 @@ from pathlib import Path
 import sys
 import time
 import subprocess
-from typing import List, Optional
+from typing import List, Optional, Iterator
 
 def read_proc(pid: int) -> dict:
     f = Path('/proc') / str(pid) / 'status'
@@ -46,6 +46,30 @@ def plot_it(results: "numpy.ndarray",
     else:
         pl.show()
 
+def parse_smaps(s: str) -> Iterator[dict]:
+    cur = {}
+    for l in s.split('\n'):
+        parts = l.split()
+        if len(parts) == 0:
+            yield cur # end of file
+        if parts[0].endswith(':'):
+            cur[parts[0][:-1]] = ' '.join(parts[1:])
+        else:
+            if cur != {}:
+                yield cur
+
+            start_s, end_s = parts[0].split('-')
+            perms = parts[1]
+            cur = {
+                'start': int(start_s, 16),
+                'end': int(end_s, 16),
+                'perms': parts[1],
+                'offset': int(parts[2], 16),
+                'dev': parts[3],
+                'inode': int(parts[4], 16),
+                'pathname': parts[5] if len(parts) >= 6 else '',
+            }
+
 def main():
     import argparse
     parser = argparse.ArgumentParser()