Create man page for libcompel

Submitted by Harshavardhan Unnibhavi on March 8, 2019, 10:37 a.m.

Details

Message ID 20190308103726.32492-1-hvubfoss@gmail.com
State New
Series "Create man page for libcompel"
Headers show

Commit Message

Harshavardhan Unnibhavi March 8, 2019, 10:37 a.m.
Signed-off-by: Harshavardhan Unnibhavi <hvubfoss@gmail.com>
---
 Documentation/Makefile   |   1 +
 Documentation/compel.txt | 119 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 120 insertions(+)
 create mode 100644 Documentation/compel.txt

Patch hide | download patch | download mbox

diff --git a/Documentation/Makefile b/Documentation/Makefile
index aa5d3ebb..cbc7ff2c 100644
--- a/Documentation/Makefile
+++ b/Documentation/Makefile
@@ -12,6 +12,7 @@  endif
 
 FOOTER		:= footer.txt
 SRC1		+= crit.txt
+SRC1		+= compel.txt
 SRC8		+= criu.txt
 SRC		:= $(SRC1) $(SRC8)
 XMLS		:= $(patsubst %.txt,%.xml,$(SRC))
diff --git a/Documentation/compel.txt b/Documentation/compel.txt
new file mode 100644
index 00000000..d5b16b43
--- /dev/null
+++ b/Documentation/compel.txt
@@ -0,0 +1,119 @@ 
+COMPEL(1)
+=======
+include::footer.txt[]
+
+NAME
+----
+compel - Execute parasitic code within another process.
+
+SYNOPSIS
+--------
+*compel* 'hgen' ['option' ...]
+
+*compel* 'plugins' ['PLUGIN_NAME' ...]
+
+*compel* ['--compat'] 'includes' | 'cflags' | 'ldflags'
+
+*compel* ['--compat'] ['--static'] 'libs'
+
+DESCRIPTION
+------------
+*compel* is a utility to execute arbitrary code, also called parasite code,
+in the context of a foreign process. The parasitic code, once compiled with
+compel flags and packed, can be executed in the context of other tasks. Currently
+there is only one way to load the parasitic blob into victim task using libcompel.a,
+called c-header.
+
+ARGUMENTS
+----------
+
+Positional Arguments
+~~~~~~~~~~~~~~~~~~~~
+
+*hgen*::
+    create a header from the .po file, which is the parasite binary.
+
+*plugins*::
+    prints the plugins available.
+
+*ldflags*::
+    prints the ldflags available to compel during linking of parasite code.
+
+*cflags*::
+    prints the compel cflags to be used during compilation of parasitic code.
+
+*includes*::
+    prints list of standard include directories.
+
+*libs*::
+    prints list of static or dynamic libraries that compel can link with.
+
+OPTIONS
+--------
+*-f*, *--file* 'FILE'::
+    Path to the binary file, 'FILE', which *compel* must turn into a header
+
+*-o*, *--output* 'FILE'::
+    Path to the header file, 'FILE', where compel must write the resulting header.
+
+*-p*, *--prefix* 'NAME'::
+	  Specify prefix for var names
+
+*-l*, *--log-level* 'NUM'::
+    Default log level of compel.
+
+*-h*, *--help*::
+    Prints usage and exits.
+
+*-V*, *--version*::
+    Prints version number of compel.
+
+SOURCE EXAMPLES
+----------------
+
+Parasitic Code
+~~~~~~~~~~~~~~
+
+*#include <compel/plugins/std.h>*
+
+*int parasite_trap_cmd(int cmd, void *args);* //gets called by compel_run_in_thread()
+
+*int parasite_daemon_cmd(int cmd, void *arg);* // gets called by compel_rpc_call() and compel_rpc_call_sync()
+
+*void parasite_cleanup(void);* //gets called on parasite unload by compel_cure()
+
+Infecting code
+~~~~~~~~~~~~~~
+The parasitic code is compiled and converted to a header using *compel*, and included here.
+
+*#include <compel/compel.h>*
+
+*#include "parasite.h"*
+
+Following steps are perfomed to infect the victim process:
+
+    - stop the task: *int compel_stop_task(int pid);*
+    - prepare infection handler: *struct parasite_ctl *compel_prepare(int pid);*
+    - execute system call: *int compel_syscall(ctl, int syscall_nr, long *ret, int arg ...);*
+    - infect victim: *int compel_infect(ctl, nr_thread, size_of_args_area);*
+    - cure the victim: *int compel_cure(ctl);* //ctl pointer is freed by this call
+    - Resume victim: *int compel_resume_task(pid, orig_state, state);*
+
+*ctl* must be configured with blob information by calling *PREFIX_setup_c_header()*, with ctl as its argument.
+*PREFIX* is the argument given to *-p* when calling hgen, else it is deduced from file name.
+
+
+EXAMPLES
+---------
+To generate a header file(.h) from a parasite binary file(.po) use:
+
+----------
+    compel hgen -f parasite.po -o parasite.h
+----------
+
+'parasite.po' file is obtained by compiling the parasite source with compel flags and
+linking it with the compel plugins.
+
+AUTHOR
+------
+The CRIU team.

Comments

Cyrill Gorcunov March 12, 2019, 7:04 a.m.
On Fri, Mar 8, 2019 at 1:38 PM Harshavardhan Unnibhavi <hvubfoss@gmail.com>
wrote:

> Signed-off-by: Harshavardhan Unnibhavi <hvubfoss@gmail.com>
> ---
>
Reviewed-by: Cyrill Gorcunov <gorcunov@gmail.com>