X-Git-Url: http://git.annexia.org/?p=virt-mem.git;a=blobdiff_plain;f=lib%2Fvirt_mem.ml;h=2ed0c5ac91b755581a4bfd6b57964b4af83bb8c1;hp=32da18e40a7e5a854e71616fa3fd4550ebac1c4b;hb=fa333da9b9d5338cb18c0077ba10dffd2cc4d464;hpb=5fb8ec9a1dd22b8ea3d16f2f9847ed7234f8e560 diff --git a/lib/virt_mem.ml b/lib/virt_mem.ml index 32da18e..2ed0c5a 100644 --- a/lib/virt_mem.ml +++ b/lib/virt_mem.ml @@ -569,10 +569,25 @@ Possibly the '-T' command line parameter was used inconsistently."); fun (image, ({ ksyms = ksyms; utsname = utsname } as kdata)) -> match ksyms, utsname with | Some ksyms, Some { uts_kernel_release = kversion } -> + let image = ref image in + let load struct_name addr size = + printf "load for task, %s: %Lx %d ...\n" struct_name addr size; + let mapped = + Virt_mem_mmap.is_mapped_range !image.mem addr size in + if not mapped then image := load_memory !image addr size; + let bits = Virt_mem_mmap.get_bytes !image.mem addr size in + Bitstring.bitstring_of_string bits + in + let init_task = Ksymmap.find "init_task" ksyms in + let map = + Kernel.task_struct_follower kversion load init_task in + + (* let image, tasks = Virt_mem_tasks.find_tasks debug image ksyms kversion in let kdata = { kdata with tasks = tasks } in - image, kdata + *) + !image, kdata | _, _ -> image, kdata ) images in @@ -584,11 +599,42 @@ Possibly the '-T' command line parameter was used inconsistently."); fun (image, ({ ksyms = ksyms; utsname = utsname } as kdata)) -> match ksyms, utsname with | Some ksyms, Some { uts_kernel_release = kversion } -> + let image = ref image in + let load struct_name addr size = + printf "load for net dev, %s: %Lx %d ...\n" struct_name addr size; + let mapped = + Virt_mem_mmap.is_mapped_range !image.mem addr size in + if not mapped then image := load_memory !image addr size; + let bits = Virt_mem_mmap.get_bytes !image.mem addr size in + Bitstring.bitstring_of_string bits + in + let map = + try + let dev_base = Ksymmap.find "dev_base" ksyms in + let map = + Kernel.net_device_follower kversion load dev_base in + Some map + with Not_found -> + try + let dev_base_head = Ksymmap.find "dev_base_head" ksyms in + (* XXX adjust to get offset of start of net_device *) + assert false + with Not_found -> + try + let init_net = Ksymmap.find "init_net" ksyms in + let map = + Kernel.net_follower kversion load init_net in + Some map + with Not_found -> + eprintf (f_"%s: cannot find dev_base, dev_base_head or init_net symbols in kernel image.\n") !image.domname; + None in +(* let image, net_devices = Virt_mem_net_devices.find_net_devices debug image ksyms kversion in let kdata = { kdata with net_devices = net_devices } in - image, kdata +*) + !image, kdata | _, _ -> image, kdata ) images in