AFL/llvm_mode
作者:互联网
llvm_mode/
使用afl-clang-fast
编译前,需要设置一下AFL_PATH
,使其可以找到afl-llvm-rt.o
和 afl-llvm-pass.so
。
export AFL_PATH=/usr/class/AFL-master/
afl-clang-fast
afl-llvm-pass
afl-llvm-pass中,只有一个pass —— AFLCoverage。该pass会在每一个基础块的第一个可插入指令处插桩,检测 控制流的覆盖程度
afl-llvm-rt
三个特殊的功能
- deferred instrumentation
AFL会尝试通过仅执行一次目标二进制文件来优化性能。它会暂停控制流,然后复制该“主”进程以持续提供fuzzer的目标。该功能在某些情况下可以减少操作系统、链接与libc内部执行程序的成本。
若想使用该功能,则需要在代码中找到一个合适的位置,以便于进程的复制。 - persistent mode
由于某些库所提供的API是无状态的,又或者可以在处理不同的输入样本之间重置其状态
当API重置后,一个长期活跃的进程就可以被重复使用,这样可以消除重复执行fork函数以及OS相关所需要的开销
该模式的功能是将已经完成fuzz一个testcase的子进程进行复用,从而节省计算机开销。但是需要注意的是每次fuzz过程都会改变一些进程或线程的状态变量,因此,在复用这个fuzz子进程的时候需要将这些变量恢复成初始状态,否则会导致下一次fuzz过程的不准确。 - trace-pc-guard mode
标签:AFL,afl,llvm,fuzz,mode,pass 来源: https://www.cnblogs.com/Ricardio/p/16264268.html