
Eine Rust-Vorlage zum Schreiben von Beacon Object Files (BOFs)
Dieses Projekt ermöglicht die Entwicklung von BOFs mit Rust und vollständiger no_std-Unterstützung. Es nutzt die Sicherheitsfunktionen und die moderne Toolchain von Rust und erzeugt dabei kleine, effiziente COFF-Objekte.
Das Framework bietet alles, was für die BOF-Entwicklung benötigt wird. Der Build-Prozess kompiliert Ihren Code zu einer statischen Bibliothek, die boflink anschließend mit korrekten Relokationen und Imports für die dynamische Funktionsauflösung von Beacon in ein COFF-Objekt linkt.
Der einfachste Weg, um loszulegen, ist die Verwendung der Projektvorlage mit cargo-generate. Dadurch wird ein neues BOF-Projekt erstellt, bei dem die gesamte erforderliche Konfiguration bereits eingerichtet ist:
cargo generate --git https://github.com/joaoviictorti/rustbof .template
cd <project-name>
cargo make
Alternativ können Sie das Repository klonen und das Verzeichnis examples/ erkunden, das funktionierende BOF-Implementierungen für verschiedene Anwendungsfälle enthält. Diese Beispiele dienen als praktische Referenz für die Erstellung eigener BOFs.
git clone https://github.com/joaoviictorti/rustbof
cd rustbof/examples/whoami
cargo make
Sie können auch Docker verwenden, um zu bauen, ohne die Toolchain lokal zu installieren:
git clone https://github.com/joaoviictorti/rustbof
cd rustbof
docker build -t rustbof .
docker run -it rustbof
Das Attribut-Makro #[rustbof::main] generiert den Einstiegspunkt, der von BOF-Loadern benötigt wird. Ihre Hauptfunktion kann einfach ohne Argumente sein oder rohe Argumentdaten zum Parsen empfangen.
Ein einfacher BOF, der eine Nachricht ausgibt:
#![no_std]
use rustbof::println;
#[rustbof::main]
fn main() {
println!("Hello from Rust BOF!");
}
Für BOFs, die Argumente empfangen müssen, verwenden Sie DataParser, um typisierte Werte aus dem rohen Argumentpuffer zu extrahieren:
#![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}!");
}
rustbof ist lizenziert unter einer der folgenden Lizenzen:
ganz nach Ihrer Wahl.
Sofern Sie nicht ausdrücklich etwas anderes angeben, wird jeder Beitrag, der von Ihnen absichtlich zur Aufnahme in rustbof eingereicht wird, wie in der Apache-2.0-Lizenz definiert, wie oben beschrieben unter einer dualen Lizenz lizenziert, ohne zusätzliche Bedingungen oder Konditionen.