
Un modèle Rust pour écrire des Beacon Object Files (BOFs)
Ce projet permet le développement de BOFs en Rust avec le support complet de no_std. Il exploite les fonctionnalités de sécurité de Rust et ses outils modernes tout en produisant des objets COFF petits et efficaces.
Le framework fournit tout le nécessaire pour le développement de BOFs. Le processus de build compile votre code en une bibliothèque statique, que boflink lie ensuite en un objet COFF avec les relocations et imports appropriés pour la résolution dynamique des fonctions de Beacon.
La façon la plus simple de commencer est d'utiliser le modèle de projet avec cargo-generate. Cela créera un nouveau projet BOF avec toute la configuration nécessaire déjà en place :
cargo generate --git https://github.com/joaoviictorti/rustbof .template
cd <project-name>
cargo make
Vous pouvez également cloner le dépôt et explorer le répertoire examples/, qui contient des implémentations BOF fonctionnelles démontrant divers cas d'usage. Ces exemples servent de références pratiques pour créer vos propres BOFs.
git clone https://github.com/joaoviictorti/rustbof
cd rustbof/examples/whoami
cargo make
Vous pouvez aussi utiliser Docker pour compiler sans installer la chaîne d'outils localement :
git clone https://github.com/joaoviictorti/rustbof
cd rustbof
docker build -t rustbof .
docker run -it rustbof
La macro d'attribut #[rustbof::main] génère le point d'entrée requis par les chargeurs BOF. Votre fonction principale peut être simple, sans arguments, ou recevoir les données brutes d'arguments pour les analyser.
Un BOF basique qui affiche un message :
#![no_std]
use rustbof::println;
#[rustbof::main]
fn main() {
println!("Hello from Rust BOF!");
}
Pour les BOFs qui doivent recevoir des arguments, utilisez DataParser pour extraire des valeurs typées du tampon d'arguments brut :
#![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}!");
}
Le répertoire examples contient des BOFs fonctionnels : whoami, ipconfig et env.
rustbof est distribué sous l'une ou l'autre des licences suivantes :
au choix.
Sauf indication contraire explicite, toute contribution soumise intentionnellement pour inclusion dans rustbof par vous, telle que définie dans la licence Apache-2.0, sera doublement licenciée comme ci-dessus, sans conditions ou modalités supplémentaires.