X-Git-Url: http://git.annexia.org/?p=virt-mem.git;a=blobdiff_plain;f=lib%2Fvirt_mem_types.mli;h=7db657b35ecc8f1bbee196c3d3a45a7451a34443;hp=f537664e28d456817b8f288e3acd7ccb3ca4d867;hb=HEAD;hpb=b8aef502747b039b20877f99f3d8986b6a9329d2 diff --git a/lib/virt_mem_types.mli b/lib/virt_mem_types.mli index f537664..7db657b 100644 --- a/lib/virt_mem_types.mli +++ b/lib/virt_mem_types.mli @@ -41,63 +41,68 @@ module Ksymmap : sig val compare : ('a -> 'a -> int) -> 'a t -> 'a t -> int val equal : ('a -> 'a -> bool) -> 'a t -> 'a t -> bool end - (** A map of kernel symbols to addresses. *) + (** Functions available in the map of kernel symbols to addresses. *) -(** {2 Kernel images and associated data} *) +type ksymmap = Virt_mem_mmap.addr Ksymmap.t + (** Kernel symbol table (map of kernel symbols to addresses). *) + +(** {2 Kernel memory images and associated metadata} + + The kimage structure captures everything known about a kernel + image, including the source domain details, kernel address, kernel + symbols, kernel memory map, and all the kernel structures parsed + out of the memory map. +*) type utsname = { - kernel_name : string; - nodename : string; - kernel_release : string; - kernel_version : string; - machine : string; - domainname : string; + uts_kernel_name : string; + uts_nodename : string; + uts_kernel_release : string; + uts_kernel_version : string; + uts_machine : string; + uts_domainname : string; } (** Kernel version, from utsname structure in the kernel. *) -type image0 = { +type kimage = { dom : Libvirt.ro Libvirt.Domain.t option; (** Domain, if known. *) domname : string; (** Domain name. *) arch : Virt_mem_utils.architecture; (** Architecture, eg. i386. *) - mem : ([`Wordsize], [`Endian], [`HasMapping]) Virt_mem_mmap.t; - (** Memory map. *) + kernel_min : Virt_mem_mmap.addr; (** Minimum addr of kernel pointers. *) kernel_max : Virt_mem_mmap.addr; (** Maximum addr of kernel pointers. *) -} - (** A basic kernel image. *) -type image1 = - image0 - * Virt_mem_mmap.addr Ksymmap.t (* Kernel symbol map. *) - (** A kernel image, after finding kernel symbols. *) + mem : ([`Wordsize], [`Endian], [`HasMapping]) Virt_mem_mmap.t; + (** Memory map. *) -type image2 = - image0 - * Virt_mem_mmap.addr Ksymmap.t (* Kernel symbol map. *) - * utsname option (* Kernel version, etc., if found. *) - (** A kernel image, after finding kernel version (like 'uname'). *) + addrmap : Kernel.addrmap; (** Parsed kernel structures. *) -(** {2 Load kernel memory} *) + ksyms : ksymmap; (** Kernel symbol table *) -type load_memory_error = - | AddressOutOfRange (** Address not in [kernel_min..kernel_max] *) - | DomIsNull (** image.dom = None *) + have_ksyms : bool; (** True if we were able to load + the kernel symbols. *) + have_kallsyms : bool; (** True if we were able to load + the kallsyms from the kernel. *) -exception LoadMemoryError of load_memory_error * string + utsname : utsname option; (** Kernel version, if we were able + to find it. *) -val load_static_memory : dom:Libvirt.ro Libvirt.Domain.t -> - domname:string -> - arch:Virt_mem_utils.architecture -> - wordsize:Virt_mem_utils.wordsize -> endian:Bitstring.endian -> - kernel_min:Virt_mem_mmap.addr -> kernel_max:Virt_mem_mmap.addr -> - Virt_mem_mmap.addr -> int -> image0 - (** [load_static_memory ~dom (*...*) start size] creates an [image0] - object, and initializes it with static kernel memory loaded - from the [start] address and [size] of [dom]. + have_tasks : bool; (** True if we were able to load + the kernel task_struct list. *) + have_net_devices : bool; (** True if we were able to load + the kernel net_device structures.*) +} + (** A basic kernel image. *) - See also {!load_memory} for exceptions this can raise. *) +(** {2 Functions to load kernel memory} *) + +type load_memory_error = + | AddressOutOfRange (** Address not in [kernel_min..kernel_max] *) + | DomIsNull (** kimage.dom = None *) -val load_memory : image0 -> Virt_mem_mmap.addr -> int -> image0 +exception LoadMemoryError of load_memory_error * string + +val load_memory : kimage -> Virt_mem_mmap.addr -> int -> kimage (** [load_memory img start size] tries to load [size] bytes from the start address into the memory map. If the memory was loaded previously, then it is not requested again. @@ -108,3 +113,15 @@ val load_memory : image0 -> Virt_mem_mmap.addr -> int -> image0 This function can raise many different sorts of exceptions and the caller is advised to catch any exceptions and deal with them appropriately. *) + +val load_static_memory : dom:Libvirt.ro Libvirt.Domain.t -> + domname:string -> + arch:Virt_mem_utils.architecture -> + wordsize:Virt_mem_utils.wordsize -> endian:Bitstring.endian -> + kernel_min:Virt_mem_mmap.addr -> kernel_max:Virt_mem_mmap.addr -> + Virt_mem_mmap.addr -> int -> kimage + (** [load_static_memory ~dom (*...*) start size] creates a [kimage] + object, and initializes it with static kernel memory loaded + from the [start] address and [size] of [dom]. + + See also {!load_memory} for exceptions this can raise. *)