+Source files
+------------
+
 We build all the tools into a single virt-mem executable, in order to
 share the most runtime.  Almost all the code between individual tools
 is shared anyway.
 
  - This brings everything together and links it into a single executable.
    Other than that purpose, there is almost nothing in this directory.
+
+General structure of lib/virt_mem.ml
+------------------------------------
+
+We start with a bare kernel memory image ('Virt_mem_types.image0')
+which gets successively enhanced with extra data along the way:
+
+       Parse command line arguments,
+       work out what virtual machines to
+       process, load kernel images
+
+               |
+               |       (passes a 'Virt_mem_types.image0')
+               V
+
+       Find kernel symbols
+
+               |
+               |       (enhanced into a 'Virt_mem_types.image1')
+               V
+
+       Find kernel version (uname)
+
+               |
+               |       (enhanced into a 'Virt_mem_types.image2')
+               V
+
+       Call tool's "run" function.
+
+Tools can register other callbacks which get called at earlier stages.
\ No newline at end of file