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.
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. *)