在 no_std
环境中使用 LibAFL
可以在 no_std
环境中使用 LibAFL,例如自定义平台,如微控制器、内核、管理程序等等。
你可以简单地将 LibAFL 添加到你的 Cargo.toml
文件中:
libafl = { path = "path/to/libafl/", default-features = false}
然后构建你的项目,例如为 aarch64-unknown-none
使用:
cargo build --no-default-features --target aarch64-unknown-none
使用自定义时间戳
LibAFL 对 no_std
的最小输入量是一个单调增长的时间戳。
为此,在你项目的任何地方,你需要实现 external_current_millis
函数,它以毫秒为单位返回当前时间。
// 假设这是一个来自自定义stdlib的时钟源,你想使用它,它以秒为单位返回当前时间。
int my_real_seconds(void)
{
return *CLOCK;
}
而在这里我们在 Rust 中使用它,external_current_millis
会被LibAFL调用。
注意,它需要是 no_mangle
,以便在链接时被 LibAFL 接受。
#[no_mangle]
pub extern "C" fn external_current_millis() -> u64 {
unsafe { my_real_seconds()*1000 }
}