首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用libfuzzers自定义变异器API?

如何使用libfuzzers自定义变异器API?
EN

Stack Overflow用户
提问于 2020-07-02 23:43:40
回答 1查看 752关注 0票数 4

Libfuzzer提供了两个API来开发定制的变异器。

代码语言:javascript
复制
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)

这些API应该如何使用?模糊器必须是确定性的。如何使用自定义变异器确保这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-28 19:25:08

您只需将这些函数与LLVMFuzzerTestOneInput一起实现即可。

google/fuzing资源库有一个关于如何实现结构感知的模糊化的教程。

此外,您还可以从CustomMutatorTest.cppCustomCrossOverTest.cpp那里获得灵感,它们来自LLVM存储库。

模糊器必须是确定性的。

是的,但是在这里您将编写变异函数,它们是不同的;在调用LLVMFuzzerTestOneInput之前会发生突变。

然而,它们也有类似的要求。正如源代码中所概述的,LLVMFuzzerCustomMutatorLLVMFuzzerCustomCrossOver分别是:

可选用户提供的自定义变送器。在[ data,Data+Size)位置上突变原始数据。返回新大小,该大小不大于MaxSize。同样的种子会产生同样的突变。可选用户提供的自定义交叉功能。将Data1和Data2片段合并到Out中。返回新大小,该大小不大于MaxOutSize。应该产生相同的突变给同样的种子。

,即对具有相同Dataseed的突变函数的两个调用应该产生相同的结果。

最后一件事:您不需要实现这两个函数;在大多数情况下,LLVMFuzzerCustomMutator应该足够了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62706527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档