我可以使用makefile中的以下变量成功编译Nginx
CC = clang-6.0
CFLAGS = -pipe -O -Wall -Wextra -Wpointer-arith -Wconditional-uninitialized -Wno-unused-parameter -Werror -g
尝试使用-fsanitize = fuzzer或-fsanitize = fuzzer-no-link并将我的Makefile更改为:
CFLAGS = -pipe -fsantizer=fuzzer-no-link -O -Wall -Wextra -Wpointer-arith -Wconditional-uninitialized -Wno-unused-parameter -Werror -g
我收到了许多针对__sancov_lowest_stack
和__sanitizer_cov_trace_const_cmp8
我该如何解决这个问题?我错过了哪些图书馆?
答案 0 :(得分:0)
您需要链接到honggfuzz / libhfuzz / libhfuzz.a。
答案 1 :(得分:0)
您必须在-fsanitize=fuzzer
和 CFLAGS
中添加LDFLAGS
之类的消毒剂标志。
如果它们没有传递给链接器而是传递给了编译器,则对于消毒剂运行时库函数(如您在问题中引用的函数)会产生大量未定义的符号错误。
请注意,在使用-fsanitizer=fuzzer
时,将其与Adress Sanitizer(即-fsanitizer=fuzzer,address
)结合使用是很有意义的。
此外,使用libFuzzer,您have to provide your own fuzzer callback function LLVMFuzzerTestOneInput()
并省略了main()
函数。