和afl-gcc是对gcc的包装类似,afl-clang-fast是对clang的包装。afl-clang-fast通过llvm pass来实现插桩,性能和效率更胜一筹。
afl-clang-fast插桩最终目的,和afl-gcc一样,将以下伪代码插入到每个Basic Block中:
cur_location = <COMPILE_TIME_RANDOM>;
shared_mem[cur_location ^ prev_location]++;
prev_location = cur_location >> 1;
afl-llvm-pass.so.cc的解析,网上有代码写的很清楚,这里不重复了,只是引用一下别人的文章。
llvm基本概念,参考:AFL二三事 -- 源码分析 2-二进制漏洞-看雪论坛-安全社区|安全招聘|bbs.pediy.com
llvm IR相关概念,参考:
afl-llvm-pass.so.cc解析,参考: