• 【AFL(六)】AFL源码中的那些头文件


    前言:

    AFL中有一些自定义的头文件,说不上很重要,但是又不得不说。一共有五个头文件需要说一下:

    当然还有一个afl-as.h文件,这个跟插桩过程相关,暂且先不谈。


    【一】config.h

    顾名思义,属于配置类的头文件,包含大量的宏定义,用来规定。

    宏定义大概分三个部分,刚开始是一些通用的参数,如输入输出文件的大小,用户的颜色配置;第二部分是跟变异有关的,比如在文件变异时候的interest过程,所用到的预设特殊值,就是在这个头文件中定义的,还有bitflip阶段的  token  长度定义也是在这个头文件中;第三部分是特殊用途的宏定义,比如  HASH_CONST  定义了哈希函数里的一个长度常量,等等;


    【二】types.h

    属于类型重定义的作用,一些在  afl-fuzz.c  中看不太懂的类型,可以在这里看看是不是有相关定义,比如 u8 在源码中经常出现,实际上在这个头文件可以看出 typedef uint8_t u8,所以其对应的类型应该是 uint8_t ,对应的是 C99 标准里的无符号字符型


    【三】debug.h

    调试,宏定义各种参数及函数,比如显示的颜色,还有各种自定义的函数,如果改AFL,这些东西相当于没有编译器情况下的"高端printf(滑稽脸)",比如最常见的  OKF("We're done here. Have a nice day! ");  其中的 OKF 就是一个输出代表成功信息的函数


    【四】alloc-inl.h

    内存相关,提供错误检查、内存清零、内存分配等常规操作,“内存器的设计初衷不是为了抵抗恶意攻击,但是它确实提供了便携健壮的内存处理方式,可以检查 use-after-free 等”


    【五】hash.h

    头文件主要是提供了一个哈希函数,实现一个参数为  const void* key, u32 len, u32 seed  返回为 u32 的静态内联函数,以高效率抽象出自己实现的哈希函数。

    在头文件中准对函数的实现其实有一些别人的优化,也有一些相关论文 CollAFL:Path Sensitive Fuzzing-SP-2018 就是准对哈希函数的改进。

  • 相关阅读:
    osg利用矩阵投影在平面上产生阴影
    让openGL告诉你,什么是物体的移动与旋转
    利用openGL纯手工打造一个金字塔
    Java基础(四) StringBuffer、StringBuilder原理浅析
    Java基础(二) 基本类型数据类型、包装类及自动拆装箱
    Java基础(一) 八大基本数据类型
    小酌重构系列[20]——用条件判断代替异常
    小酌重构系列[19]——分解大括号
    小酌重构系列[18]——重命名
    小酌重构系列[17]——提取工厂类
  • 原文地址:https://www.cnblogs.com/wayne-tao/p/12091747.html
Copyright © 2020-2023  润新知