我目前开始使用C ++进行模糊测试。按照https://github.com/google/fuzzer-test-suite/blob/master/tutorial/libFuzzerTutorial.md上的教程,我成功使用了AddressSanitizer。在该教程中,还建议至少尝试使用UBSan。
来自documentation on UBSan的示例工作正常,由于有符号整数溢出,我立即得到运行时错误。但是,当我尝试围绕示例构建一个模糊器时,我不再报告任何错误。
示例代码是
// test.cpp
int main(int argc, char **argv) {
int k = 0x7fffffff;
k += argc;
return 0;
}
我用clang++ -fsanitize=undefined test.cpp -o test
编译。
为了获取我的模糊器,我将代码更改为
// fuzz.cpp
#include <cstddef>
extern "C" int LLVMFuzzerTestOneInput(const char *data, size_t len)
{
int k = 0x7fffffff;
k += len;
return 0;
}
并使用clang++ -fsanitize=undefined -fno-sanitize-recover=undefined -fsanitize-coverage=trace-pc-guard fuzz.cpp libFuzzer.a -o fuzz
构建它。
有没有人知道我要改变什么,以便模糊器也找到有符号整数溢出?