X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=lib%2Fvirt_mem_capture.ml;fp=lib%2Fvirt_mem_capture.ml;h=29f746627497217ae50ddb82e95ebacee523a294;hb=e3b79ee907537feec9274b1bfab7e450fc97dbcf;hp=413af56393b1ff901bf16f79ae0338bf6dff3367;hpb=e3fb3f8a0930d3662f547d1854b75d49e6d74599;p=virt-mem.git diff --git a/lib/virt_mem_capture.ml b/lib/virt_mem_capture.ml index 413af56..29f7466 100644 --- a/lib/virt_mem_capture.ml +++ b/lib/virt_mem_capture.ml @@ -65,11 +65,25 @@ let rec beforeksyms debug = function 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