其他分享
首页 > 其他分享> > AFL/llvm_mode

AFL/llvm_mode

作者:互联网

llvm_mode/

参考:https://kiprey.github.io/2020/07/AFL-LLVM-Mode/#1-简介

使用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

三个特殊的功能

  1. deferred instrumentation
    AFL会尝试通过仅执行一次目标二进制文件来优化性能。它会暂停控制流,然后复制该“主”进程以持续提供fuzzer的目标。该功能在某些情况下可以减少操作系统、链接与libc内部执行程序的成本。
    若想使用该功能,则需要在代码中找到一个合适的位置,以便于进程的复制。
  2. persistent mode
    由于某些库所提供的API是无状态的,又或者可以在处理不同的输入样本之间重置其状态
    当API重置后,一个长期活跃的进程就可以被重复使用,这样可以消除重复执行fork函数以及OS相关所需要的开销
    该模式的功能是将已经完成fuzz一个testcase的子进程进行复用,从而节省计算机开销。但是需要注意的是每次fuzz过程都会改变一些进程或线程的状态变量,因此,在复用这个fuzz子进程的时候需要将这些变量恢复成初始状态,否则会导致下一次fuzz过程的不准确。
  3. trace-pc-guard mode

标签:AFL,afl,llvm,fuzz,mode,pass
来源: https://www.cnblogs.com/Ricardio/p/16264268.html