-type ksym = string
- (** A kernel symbol name. *)
-
-type image =
- string
- * Virt_mem_utils.architecture
- * ([`Wordsize], [`Endian]) Virt_mem_mmap.t
- * (ksym -> Virt_mem_mmap.addr)
- (** An image after it has been processed by the code common to
- all commands.
-
- The tuple fields are:
- - name
- - architecture (eg. I386)
- - kernel memory map (wordsize & endianness already determined)
- - a function to look up kernel symbols. It raises [Not_found]
- if a kernel symbol could not be found or if the kernel symbol
- table could not be found at all.
- *)
+val register :
+ ?needs_ksyms:bool ->
+ ?needs_utsname:bool ->
+ ?needs_tasks:bool ->
+ ?needs_net_devices:bool ->
+ ?needs_everything:bool ->
+ run:(bool -> Virt_mem_types.kimage -> unit) ->
+ ?external_cmd:bool ->
+ ?extra_args:(Arg.key * Arg.spec * Arg.doc) list ->
+ ?argcheck:(bool -> unit) ->
+ string -> string -> Arg.usage_msg ->
+ unit
+ (** Tools register themselves with this call.
+
+ The required parameters are:
+ - tool name (eg. "uname")
+ - short summary
+ - full usage message
+
+ The boolean parameters specify what kernel structures the
+ tool needs before it can run. The main program will read
+ these structures in before calling [~run].
+ - [~needs_ksyms:true] if kernel symbols are needed
+ - [~needs_utsname:true] if kernel version (utsname) is needed
+ - [~needs_tasks:true] if all task_struct (processes) are needed
+ - [~needs_net_devices:true] if all net devices are needed
+ - [~needs_everything:true] if the tool requires as much as
+ possible (but will not fail if we cannot determine everything)