GCC 4.6的mfentry特性支持使用ftrace在内核函数前添加一个勾子函数(可使用gcc -pg -mfentry test.c; objdump -d ./a.out命令确认),这个Kernel Live-pathing功能便是在内核未运行这个函数之前将函数地址替换掉。Live-patching的数据结构见[1]. 打Live-patching的过程便是根据这个数据结构写模块动态插入,例子见[2]. kpatch是一个帮助动态地将一个patch生成这种模块的工具。使用方法见[3].
[1] https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/linux/livepatch.h
[2] http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/samples/livepatch/livepatch-sample.c
[3] http://chrisarges.net/2015/09/21/livepatch-on-ubuntu.html