
Un template in Rust per scrivere Beacon Object Files (BOF)
Questo progetto consente lo sviluppo di BOF utilizzando Rust con pieno supporto no_std. Sfrutta le funzionalità di sicurezza di Rust e gli strumenti moderni, producendo oggetti COFF piccoli ed efficienti.
Il framework fornisce tutto il necessario per lo sviluppo di BOF. Il processo di build compila il tuo codice in una libreria statica, che boflink collega poi in un oggetto COFF con le corrette rilocazioni e importazioni per la risoluzione dinamica delle funzioni di Beacon.
Il modo più semplice per iniziare è usare il template di progetto con cargo-generate. Questo creerà un nuovo progetto BOF con tutta la configurazione necessaria già impostata:
cargo generate --git https://github.com/joaoviictorti/rustbof .template
cd <project-name>
cargo make
In alternativa, puoi clonare il repository ed esplorare la directory examples/, che contiene implementazioni BOF funzionanti che dimostrano vari casi d'uso. Questi esempi servono come riferimenti pratici per creare i tuoi BOF.
git clone https://github.com/joaoviictorti/rustbof
cd rustbof/examples/whoami
cargo make
Puoi anche usare Docker per compilare senza installare la toolchain localmente:
git clone https://github.com/joaoviictorti/rustbof
cd rustbof
docker build -t rustbof .
docker run -it rustbof
La macro attributo #[rustbof::main] genera il punto di ingresso richiesto dai loader BOF. La tua funzione main può essere semplice, senza argomenti, oppure ricevere dati grezzi degli argomenti da analizzare.
Un BOF di base che stampa un messaggio:
#![no_std]
use rustbof::println;
#[rustbof::main]
fn main() {
println!("Hello from Rust BOF!");
}
Per i BOF che devono ricevere argomenti, usa DataParser per estrarre valori tipizzati dal buffer grezzo degli argomenti:
#![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}!");
}
La directory examples contiene BOF funzionanti: whoami, ipconfig ed env.
rustbof è concesso in licenza sotto uno dei seguenti:
a tua scelta.
Salvo diversa indicazione esplicita, qualsiasi contributo inviato intenzionalmente per l'inclusione in rustbof da parte tua, come definito nella licenza Apache-2.0, sarà concesso in licenza duale come sopra, senza termini o condizioni aggiuntivi.