Theory
Theroy¶
This page only introduce theroy of ULPatch, but not the implementation details.
All programs are single-threaded models, so you will not see synchronization locks in the code. Of course, we need to consider the multi-threaded situation of the target process.
ULPatch¶
Patch¶
The following figure shows the livepatch loading procedures.
The detailed steps are as follows:
- Compile source code into a relocatable ELF file, it's livepatch file;
- Load the relocatable ELF file into the target process address space;
- Relocate the symbols in the patch according to the target process address symbol table;
- Modify the patch function entry to jump to the patch function;
The start instruction of the objective function will be replaced with the jump instruction that jumps to the patch function, as shown in the following figure:
Unpatch¶
The following figure shows the uninstall procedures of the livepatch.
The unpatch
operation is the reverse operation of patch
, but without the relocate process.
ULTask¶
It's an useful tool to modify target process, I call it Program Modifier. CONFIG_BUILD_ULTASK
decides whether to compile ultask
. Check manual ultask(8)
to see more.
ULTask uses the /proc/
file system to modify and view the target process. For example, read or modify the target process memory via /proc/PID/mem
.
TODO
ULFtrace¶
Same as linux ftrace, need gcc -pg
compile option. CONFIG_BUILD_ULFTRACE
decides whether to compile ulftrace
. Check manual ulftrace(8)
to see more.
TODO