对于完整版工具而言,整个项目需要运行在vivado_hls环境下。但由于缺少FGPA,因此无法对来自硬件的信息进行处理。因此本文实现采用简化版本。该简化版本完全由C和C++代码组成,可以实现文中所述全部功能。唯一的区别是运行不再需要Xilinx编译器,工具不再处理来自FPGA的模拟反馈。
##程序功能 本工具是一个对异构程序进行模糊测试的工具。准确来讲,是一个有效模糊测试用例的产生工具。在good-seeds文件夹中指定模糊测试种子,反复运行程序,会在good-outputs文件夹中的得到符合要求的测试用例。对于测试用例的再次执行和分析可选用任意方法。本文中采用人工分析的方式,不再属于工具本身的范畴。因此,本工具的输入为:模糊测试种子,输出为:符合要求的测试用例。
- 与硬件特性相关。
- 扩大了当前模糊测试的数据范围或硬件相关检测指标(如:FPGA内存的使用情况等)
- 是原始测试种子
该本次实现所采用的被测程序为hello.c。
编译运行工具所使用的指令如下:
- make: 运行makefile文件。
- ./fuzz good-seeds/ good-outputs/ 10000 hello: 让该工具对hello.c进行10000次测试,每次产生的结果都会暂存至good-outputs文件夹。不满足要求的结果会被删除。最终good-outputs输出的是找到的满足要求的测试用例。
- 对于覆盖率的反馈和硬件加速器反馈的处理: 代码覆盖信息会转化为哈希值在控制台输出出来。(该转化方法与传统模糊测试方法完全相同)。在简化版本中无法对加速器的反馈进行处理。
- 突变因子的选择: 选择恰当的突变因子。全部的突变因子信息和所使用的概率函数详见ppt。
- 测试用例的选择调用:只保留符合要求的测试用例,而对其他测试用例进行删除。
###除good-seeds和good-outputs外的全部文件夹均为前人的研究成果。是本工具实现的辅助库。good-outputs用于存放符合要求的测试用例。good-seeds用于指定模糊测试最初的突变种子。其余文件中,afl-开头的一系列文件均为前人已有工具,用于完成模糊测试的整体流程。与其相关的文件均包含谷歌公司的版权说明,本工具实现过程中未加以修改,本工具独立实现的部分为:
- bubble和sort:定义的冒泡排序方法用于突变因子的选择和测试用例的筛选。
- filter:用于测试用例的筛选。
- fuzz:整个工具的入口,用来调用模糊测试整体流程。
- hello:所使用的待测程序。
- HeteroFuzz:主体工具部分。包括突变因子的选择和产生测试用例两个主要模块。
- input-identifier和input-test:对产生的测试用例进行进一步的筛选,删除不符合要求的测试用例。# testing-homework-mobile