use*_*312 5 clang fuzzing libfuzzer
Libfuzzer 提供了两个 API 来开发自定义变异器。
size_t LLVMFuzzerCustomMutator(uint8_t *Data, size_t Size, size_t MaxSize, unsigned int Seed)
size_t LLVMFuzzerCustomCrossOver(const uint8_t *Data1, size_t Size1, const uint8_t *Data2, size_t Size2, uint8_t *Out, size_t MaxOutSize, unsigned int Seed)
Run Code Online (Sandbox Code Playgroud)
这些API应该如何使用?模糊器需要具有确定性。如何使用自定义变异器确保这一点?
您只需要与您的应用程序一起实现这些功能LLVMFuzzerTestOneInput
.
google /fuzzing 存储库有一个关于如何实现结构感知模糊测试的教程。
此外,您还可以从LLVM 存储库中的CustomMutatorTest.cpp和CustomCrossOverTest.cpp中获取灵感。
模糊器需要具有确定性。
是的,但是在这里你将编写不同的突变函数;突变将在你之前发生LLVMFuzzerTestOneInput
被调用之前发生。
然而,他们有类似的要求。正如源代码、 、LLVMFuzzerCustomMutator
和中LLVMFuzzerCustomCrossOver
分别概述的那样:
可选的用户提供的自定义突变器。就地改变 [Data, Data+Size) 中的原始数据。返回新的大小,该大小不大于 MaxSize。给予相同的种子会产生相同的突变。
可选的用户提供的自定义交叉功能。将 Data1 和 Data2 的片段合并到 Out 中。返回新大小,该大小不大于 MaxOutSize。给予相同的种子应该产生相同的突变。
即Data
两次调用具有相同和的突变函数seed
应该产生相同的结果。
最后一件事:您不需要实现这两个功能; LLVMFuzzerCustomMutator
在大多数情况下应该足够了。
归档时间: |
|
查看次数: |
1716 次 |
最近记录: |