
Beacon Object Files (BOFs) を作成するための Rust テンプレート
このプロジェクトは、完全な no_std サポートを備えた Rust を使用した BOF の開発を可能にします。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 に組み込むことを意図して提出されたいかなる貢献も、追加の条件なしに上記のとおり二重ライセンスが適用されます。