
Beacon Object Files(BOF) 작성을 위한 Rust 템플릿
이 프로젝트는 완전한 no_std 지원과 함께 Rust를 사용하여 BOF를 개발할 수 있게 해줍니다. Rust의 안전성 기능과 현대적인 도구를 활용하면서 작고 효율적인 COFF 객체를 생성합니다.
이 프레임워크는 BOF 개발에 필요한 모든 것을 제공합니다. 빌드 프로세스는 코드를 정적 라이브러리로 컴파일하며, boflink가 이를 Beacon의 동적 함수 해석을 위한 올바른 재배치(relocations) 및 임포트(imports)가 포함된 COFF 객체로 링크합니다.
시작하는 가장 쉬운 방법은 cargo-generate로 프로젝트 템플릿을 사용하는 것입니다. 이렇게 하면 필요한 모든 구성이 이미 설정된 새 BOF 프로젝트가 생성됩니다:
cargo generate --git https://github.com/joaoviictorti/rustbof .template
cd <project-name>
cargo make
또는 저장소를 클론하고 다양한 사용 사례를 보여주는 실제 동작하는 BOF 구현이 포함된 examples/ 디렉터리를 살펴볼 수 있습니다. 이 예제들은 자신만의 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는 다음 중 하나의 라이선스가 적용됩니다.
원하는 대로 선택할 수 있습니다.
별도로 명시하지 않는 한, Apache-2.0 라이선스에 정의된 대로 귀하가 rustbof에 포함을 위해 의도적으로 제출한 모든 기여는 추가 약관이나 조건 없이 위와 같이 이중 라이선스가 적용됩니다.