
Una plantilla de Rust para escribir Beacon Object Files (BOFs)
Este proyecto permite el desarrollo de BOFs usando Rust con soporte completo de no_std. Aprovecha las características de seguridad de Rust y las herramientas modernas, produciendo objetos COFF pequeños y eficientes.
El framework proporciona todo lo necesario para el desarrollo de BOFs. El proceso de compilación convierte tu código en una biblioteca estática, que boflink enlaza posteriormente en un objeto COFF con las reubicaciones e importaciones adecuadas para la resolución dinámica de funciones de Beacon.
La forma más sencilla de empezar es utilizar la plantilla del proyecto con cargo-generate. Esto creará un nuevo proyecto BOF con toda la configuración necesaria ya establecida:
cargo generate --git https://github.com/joaoviictorti/rustbof .template
cd <project-name>
cargo make
Alternativamente, puedes clonar el repositorio y explorar el directorio examples/, que contiene implementaciones BOF funcionales que demuestran varios casos de uso. Estos ejemplos sirven como referencias prácticas para construir tus propios BOFs.
git clone https://github.com/joaoviictorti/rustbof
cd rustbof/examples/whoami
cargo make
También puedes usar Docker para compilar sin instalar el conjunto de herramientas localmente:
git clone https://github.com/joaoviictorti/rustbof
cd rustbof
docker build -t rustbof .
docker run -it rustbof
La macro de atributo #[rustbof::main] genera el punto de entrada requerido por los cargadores de BOF. Tu función principal puede ser simple, sin argumentos, o recibir datos de argumentos sin procesar para analizarlos.
Un BOF básico que imprime un mensaje:
#![no_std]
use rustbof::println;
#[rustbof::main]
fn main() {
println!("Hello from Rust BOF!");
}
Para BOFs que necesitan recibir argumentos, usa DataParser para extraer valores tipados del buffer de argumentos sin procesar:
#![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}!");
}
El directorio examples contiene BOFs funcionales: whoami, ipconfig y env.
rustbof se distribuye bajo una de las siguientes licencias:
a tu elección.
Salvo que indiques explícitamente lo contrario, cualquier contribución enviada intencionalmente para su inclusión en rustbof por tu parte, según lo definido en la licencia Apache-2.0, se distribuirá bajo la doble licencia mencionada anteriormente, sin términos ni condiciones adicionales.