quanttide / quanttide-handbook-of-c-language

量潮C语言手册
0 stars 0 forks source link

libFuzzer #3

Open Guo-Zhang opened 7 months ago

Guo-Zhang commented 7 months ago

步骤

编写模糊测试函数

编写一个模糊测试函数,该函数接收输入数据并调用你想要测试的代码。 使用libFuzzer提供的宏和API来报告发现的问题,例如LIBFUZZER_TEST_ONE_INPUT。

编译和运行模糊测试

使用libFuzzer运行你的程序,它会自动生成输入并尝试触发新的代码路径。 你可以提供一个初始的输入语料库来帮助libFuzzer更快地开始工作。

将libFuzzer与你的程序链接起来,通常需要使用特定的编译器标志,例如-fsanitize=fuzzer。 为你的程序定义一个模糊测试入口点,这通常是一个接受字节序列作为输入的函数。

libFuzzer通过覆盖率信息来引导输入生成,因此你的程序需要支持代码覆盖率收集。 使用编译器标志(如-fsanitize-coverage=...)来启用覆盖率收集。

监控与调试

监控libFuzzer的输出,了解测试进度和发现的问题。 使用调试工具来分析导致程序崩溃或异常的输入。

优化与调优

根据libFuzzer的反馈调整你的代码或测试策略。 考虑使用字典来指导模糊测试,以及使用其他高级功能来提高效率。

Q and A

(一些比较基础的关键问题,计划整理以后放教程里。)

如何开启?

将libFuzzer与你的程序链接起来,通常需要使用特定的编译器标志,例如-fsanitize=fuzzer

-fsanitize 参数是什么意思?

-fsanitize 是一个编译器选项,用于启用各种运行时检查,以帮助发现内存错误、数据竞争和其他可能的错误。“sanitize” 的意思是“使……清洁”,在这里是指帮助清理或消除代码中的错误。

Guo-Zhang commented 7 months ago

监控libFuzzer的输出

运行libFuzzer

启动libFuzzer测试你的程序。输出通常会直接打印到终端。

选项1:控制台实时监控

保持终端打开,实时查看输出。libFuzzer会不断地输出有关其进展的信息。

理解输出:

选项2:保存输出

将输出重定向到文件中,以便后续分析。例如,使用以下命令将输出保存到fuzz_output.txt文件中: 复制 ./fuzzer_binary > fuzz_output.txt 如果你正在使用afl-fuzz或其他模糊测试工具,它们通常会有一个目录来保存发现的测试用例和崩溃信息。

分析崩溃

当libFuzzer发现崩溃时,它会保存导致崩溃的输入文件。使用这些文件来重现和调试问题。 使用调试工具(如GDB或LLDB)来分析崩溃的原因。