portable kprobe实现
简介
https://github.com/livingshade/rCore-eBPF-enhancement/tree/master
基于https://github.com/latte-c/rCore/tree/bpf/kernel实现,基本原理相同,见文档https://github.com/latte-c/rCore/tree/bpf/kernel/docs。
移植方法
见仓库中README.md以及后续文档的几个例子。
实现改进
相比于原本的版本做了以下改进:
文档
添加了更详细的注释,包含函数的具体执行逻辑,用cargo docs风格写在代码内,更方便阅读。
模块化
将os相关的部分分离至单独的模块中方便移植,并移植到zCore,rCore-Tutorial中方便后续开发(因为rCore不再被维护)。测试用例也分离到了单独的模块中。
相比于之前使用crate的模块化实现https://github.com/hm1229/rkprobes有以下区别:
-
添加了对Trapframe模块的抽象,不强制OS使用同一个Trapframe库。
-
指令缓存中选择让OS提供页分配接口而不是直接存储在Kprobes的数据结构中,方便OS单独设置相关页的权限。
-
由于和OS耦合性较强而没有使用crate,选择将OS相关代码抽象出来通过修改代码移植。