X-Git-Url: http://git.annexia.org/?p=virt-mem.git;a=blobdiff_plain;f=lib%2Fvirt_mem_types.mli;h=7db657b35ecc8f1bbee196c3d3a45a7451a34443;hp=2d6e9eedd1d4e406467c7be5fb71614f7ecc2146;hb=087e50157b4661100f70d1cd6c79b22e85c40c25;hpb=14c916e5692f6d1986a10b88d03b41349dcb729a diff --git a/lib/virt_mem_types.mli b/lib/virt_mem_types.mli index 2d6e9ee..7db657b 100644 --- a/lib/virt_mem_types.mli +++ b/lib/virt_mem_types.mli @@ -46,73 +46,63 @@ end type ksymmap = Virt_mem_mmap.addr Ksymmap.t (** Kernel symbol table (map of kernel symbols to addresses). *) -(** {2 Kernel images and associated data} *) +(** {2 Kernel memory images and associated metadata} -type image = { - 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. *) + 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 kdata = { - ksyms : ksymmap option; (** Kernel symbol lookup function. *) - utsname : utsname option; (** Kernel version. *) - tasks : Virt_mem_mmap.addr option; (** Linked list of tasks (processes) - starting at the address of - init_task (swapper). *) - net_devices : Virt_mem_mmap.addr option; (** Linked list of net devices - starting at the address of - dev_base_head. *) -} - (** Optional data derived from the raw kernel image by the main - program and passed to the tools' [~run] functions. +type kimage = { + dom : Libvirt.ro Libvirt.Domain.t option; (** Domain, if known. *) + domname : string; (** Domain name. *) + arch : Virt_mem_utils.architecture; (** Architecture, eg. i386. *) + + kernel_min : Virt_mem_mmap.addr; (** Minimum addr of kernel pointers. *) + kernel_max : Virt_mem_mmap.addr; (** Maximum addr of kernel pointers. *) - What fields get filled in is controlled by the [~needs_*] - options passed when tools register themselves, and also of - course by what we are able to find out about the memory image. + mem : ([`Wordsize], [`Endian], [`HasMapping]) Virt_mem_mmap.t; + (** Memory map. *) - Note there is significant cost to filling in some of these - fields. -*) + addrmap : Kernel.addrmap; (** Parsed kernel structures. *) -(** {2 Kernel structure parsers} *) + ksyms : ksymmap; (** Kernel symbol table *) -exception ParseError of string * string * string - (** Parsing exception raised by [Kernel_*] parser functions. + 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. *) - The fields are: structure name, function which raised the error, - error message. *) + utsname : utsname option; (** Kernel version, if we were able + to find it. *) -type fieldsig = { - field_available : bool; (** Field available in this kernel version? *) - field_offset : int; (** Offset of field in this kernel version. *) + 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.*) } - (** Returned by [Kernel_*.field_signature_of_*] functions. *) + (** A basic kernel image. *) -(** {2 Load kernel memory} *) +(** {2 Functions to load kernel memory} *) type load_memory_error = | AddressOutOfRange (** Address not in [kernel_min..kernel_max] *) - | DomIsNull (** image.dom = None *) + | DomIsNull (** kimage.dom = None *) exception LoadMemoryError of load_memory_error * string -val load_memory : image -> Virt_mem_mmap.addr -> int -> image +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. @@ -129,8 +119,8 @@ val load_static_memory : dom:Libvirt.ro Libvirt.Domain.t -> 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 -> image - (** [load_static_memory ~dom (*...*) start size] creates an [image0] + 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].