Coder Social home page Coder Social logo

hfuz's Introduction

对程序的说明

对于完整版工具而言,整个项目需要运行在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

hfuz's People

Contributors

zyltt avatar

Watchers

Nougat avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.