
Um template Rust para escrever Beacon Object Files (BOFs)
Este projeto permite o desenvolvimento de BOFs usando Rust com suporte total a no_std. Ele aproveita os recursos de segurança do Rust e o ferramental moderno, ao mesmo tempo em que produz objetos COFF pequenos e eficientes.
A estrutura fornece tudo o que é necessário para o desenvolvimento de BOFs. O processo de build compila seu código para uma biblioteca estática, que o boflink então vincula em um objeto COFF com realocações e imports adequados para a resolução dinâmica de funções do Beacon.
A maneira mais fácil de começar é usar o template de projeto com cargo-generate. Isso criará um novo projeto BOF com toda a configuração necessária já definida:
cargo generate --git https://github.com/joaoviictorti/rustbof .template
cd <project-name>
cargo make
Alternativamente, você pode clonar o repositório e explorar o diretório examples/, que contém implementações BOF funcionais demonstrando vários casos de uso. Esses exemplos servem como referências práticas para construir seus próprios BOFs.
git clone https://github.com/joaoviictorti/rustbof
cd rustbof/examples/whoami
cargo make
Você também pode usar Docker para compilar sem instalar a toolchain localmente:
git clone https://github.com/joaoviictorti/rustbof
cd rustbof
docker build -t rustbof .
docker run -it rustbof
O macro de atributo #[rustbof::main] gera o ponto de entrada exigido pelos loaders de BOF. Sua função main pode ser simples, sem argumentos, ou receber dados brutos de argumentos para análise.
Um BOF básico que imprime uma mensagem:
#![no_std]
use rustbof::println;
#[rustbof::main]
fn main() {
println!("Hello from Rust BOF!");
}
Para BOFs que precisam receber argumentos, use DataParser para extrair valores tipados do buffer bruto de argumentos:
#![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}!");
}
O diretório examples contém BOFs funcionais: whoami, ipconfig e env.
rustbof é licenciado sob uma das seguintes licenças:
à sua escolha.
Salvo indicação explícita em contrário, qualquer contribuição intencionalmente submetida para inclusão no rustbof por você, conforme definido na licença Apache-2.0, será licenciada duplamente como acima, sem quaisquer termos ou condições adicionais.