
قالب Rust لكتابة ملفات كائنات Beacon (BOFs)
يتيح هذا المشروع تطوير BOFs باستخدام Rust مع دعم كامل لـ no_std. يستفيد من ميزات الأمان في Rust والأدوات الحديثة مع إنتاج ملفات COFF صغيرة وفعّالة.
يوفر الإطار كل ما تحتاجه لتطوير BOFs. تقوم عملية البناء بترجمة كودك إلى مكتبة ثابتة، ثم يقوم boflink بربطها في ملف COFF مع عمليات إعادة التموضع (relocations) والاستيرادات المناسبة لآلية حلّ الدوال الديناميكي في Beacon.
أسهل طريقة للبدء هي استخدام قالب المشروع مع cargo-generate. سينشئ هذا مشروع BOF جديدًا مع كل الإعدادات اللازمة مُهيأة مسبقًا:
cargo generate --git https://github.com/joaoviictorti/rustbof .template
cd <project-name>
cargo make
بدلاً من ذلك، يمكنك استنساخ المستودع واستكشاف دليل ، الذي يحتوي على تطبيقات BOF عاملة توضح حالات استخدام متنوعة. تُعد هذه الأمثلة مراجع عملية لبناء BOFs الخاصة بك.
examples/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!");
}
بالنسبة إلى BOFs التي تحتاج إلى استقبال وسائط، استخدم 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}!");
}
rustbof مرخّص بموجب أحد الخيارين التاليين:
حسب اختيارك.
ما لم تنص صراحةً على خلاف ذلك، فإن أي مساهمة تُقدَّم عمدًا لإدراجها في rustbof من قبلك، وفقًا لما هو محدد في ترخيص Apache-2.0، ستُرخَّص بشكل مزدوج كما هو مذكور أعلاه، دون أي شروط أو أحكام إضافية.