
Шаблон на Rust для написания Beacon Object Files (BOF)
Этот проект позволяет разрабатывать BOF с использованием Rust с полной поддержкой no_std. Он использует возможности безопасности Rust и современный инструментарий, создавая при этом небольшие и эффективные COFF-объекты.
Фреймворк предоставляет всё необходимое для разработки BOF. Процесс сборки компилирует ваш код в статическую библиотеку, которую boflink затем связывает в COFF-объект с корректными релокациями и импортами для динамического разрешения функций Beacon.
Самый простой способ начать — использовать шаблон проекта с помощью cargo-generate. Это создаст новый BOF-проект со всей необходимой конфигурацией:
cargo generate --git https://github.com/joaoviictorti/rustbof .template
cd <project-name>
cargo make
В качестве альтернативы можно клонировать репозиторий и изучить каталог examples/, который содержит рабочие реализации BOF, демонстрирующие различные варианты использования. Эти примеры служат практическими образцами для создания собственных BOF.
git clone https://github.com/joaoviictorti/rustbof
cd rustbof/examples/whoami
cargo make
Также можно использовать Docker для сборки без установки инструментария локально:
git clone https://github.com/joaoviictorti/rustbof
cd rustbof
docker build -t rustbof .
docker run -it rustbof
Атрибутный макрос #[rustbof::main] генерирует точку входа, необходимую для BOF-загрузчиков. Ваша функция main может быть простой, без аргументов, или принимать необработанные данные аргументов для их разбора.
Простой BOF, выводящий сообщение:
#![no_std]
use rustbof::println;
#[rustbof::main]
fn main() {
println!("Hello from Rust BOF!");
}
Для BOF, которым необходимо принимать аргументы, используйте DataParser для извлечения типизированных значений из буфера необработанных аргументов:
#![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}!");
}
Каталог examples содержит рабочие BOF: whoami, ipconfig и env.
rustbof распространяется на условиях одной из следующих лицензий:
на ваш выбор.
Если вы явно не заявили об обратном, любой вклад, намеренно отправленный для включения в rustbof вами, как указано в лицензии Apache-2.0, подлежит двойному лицензированию, как указано выше, без каких-либо дополнительных условий.