【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!\n");  其中的 OKF 就是一个输出代表成功信息的函数


【四】alloc-inl.h

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


【五】hash.h

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

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

相关