save_image image filename
) images
-and save_image (_, domname, arch, mmap) filename =
- printf (f_"virt-mem capture: saving kernel image from %s to filename %s\n")
- domname filename;
+and save_image (_, domname, arch, mem) filename =
+ let chan = open_out filename in
- assert false
+ (* XXX At the moment, CONTRARY to what it says in the manual, we
+ * are only able to dump out raw data. We don't save the header,
+ * start address, etc. (which we should do). XXX
+ *)
+ assert (Virt_mem_mmap.nr_mappings mem = 1);
+
+ Virt_mem_mmap.iter mem (
+ fun start size ->
+ let bytes = Virt_mem_mmap.get_bytes mem start (Int64.to_int size) in
+ output_string chan bytes
+ );
+
+ close_out chan;
+
+ printf (f_"virt-mem capture: wrote kernel image from %s to filename %s\n")
+ domname filename
let summary = s_"capture memory image for post-mortem analysis"
let description = s_"Capture a memory image to a file for later post-mortem