Skip to content

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有以下区别:

  1. 添加了对Trapframe模块的抽象,不强制OS使用同一个Trapframe库。

  2. 指令缓存中选择让OS提供页分配接口而不是直接存储在Kprobes的数据结构中,方便OS单独设置相关页的权限。

  3. 由于和OS耦合性较强而没有使用crate,选择将OS相关代码抽象出来通过修改代码移植。