本项目支持使用 Rust 开发 BOF,并提供完整的 no_std 支持。它利用 Rust 的安全特性和现代化工具链,同时生成小巧高效的 COFF 对象文件。
该框架提供了 BOF 开发所需的一切。构建过程会将你的代码编译为静态库,随后由 boflink 链接为带有正确重定位和导入的 COFF 对象,以供 Beacon 进行动态函数解析。
最简单的入门方式是使用 cargo-generate 配合项目模板。这将创建一个已配置好所有必要设置的全新 BOF 项目:
cargo generate --git https://github.com/joaoviictorti/rustbof .template
cd <project-name>
cargo make
或者,你可以克隆仓库并浏览 examples/ 目录,其中包含展示各种用例的可运行 BOF 实现。这些示例可作为构建你自己的 BOF 时的实用参考。
git clone https://github.com/joaoviictorti/rustbof
cd rustbof/examples/whoami
cargo make
你也可以使用 Docker 进行构建,而无需在本地安装工具链:
git clone https://github.com/joaoviictorti/rustbof
cd rustbof
docker build -t rustbof .
docker run -it rustbof
#[rustbof::main] 属性宏会生成 BOF 加载器所需的入口点。你的 main 函数既可以是简单的无参数形式,也可以接收原始参数数据以供解析。
一个打印消息的基础 BOF:
#![no_std]
use rustbof::println;
#[rustbof::main]
fn main() {
println!("Hello from Rust BOF!");
}
对于需要接收参数的 BOF,可使用 DataParser 从原始参数缓冲区中提取类型化值:
#![no_std]
use rustbof::println;
use rustbof::data::DataParser;
#[rustbof::main]
fn main(args: *mut u8, len: usize) {
let mut parser = DataParser::new(args, len);
let name = parser.get_str();
println!("Hello, {name}!");
}
examples 目录包含可运行的 BOF:whoami、ipconfig 和 env。
rustbof 采用以下任一许可证进行授权:
你可任选其一。
除非你另有明确声明,否则根据 Apache-2.0 许可证的定义,任何你有意提交以纳入 rustbof 的贡献,均将按上述双重许可证进行授权,且不附加任何 额外条款或条件。