2、LLVM mode (afl-clang-fast/afl-clang-fast++) 依赖LLVM的optimizer,稳定性较高的编译器,用的比较多,可以跨平台(non-x86)编译。 实现了编译级插桩,效果比汇编级插桩更好。 3、GCC_PLUGIN mode (afl-gcc-fast/afl-g++-fast) 效果和LLVM mode差不多,不...
1. afl-gcc模式 afl-gcc/afl-g++作为gcc/g++的wrapper,它们的用法完全一样,前者会将接收到的参数传递给后者,我们编译程序时只需要将编译器设置为afl-gcc/afl-g++就行,如下面演示的那样。如果程序不是用autoconf构建,直接修改Makefile文件中的编译器为afl-gcc/g++也行。 $ ./configure CC="afl-gcc" CXX="a...
$ ./configure --disable-shared CC="afl-gcc" CXX="afl-g++" 2. LLVM模式 LLVM Mode模式编译程序可以获得更快的Fuzzing速度,进入llvm_mode目录进行编译,之后使用afl-clang-fast构建序程序即可,如下所示: $ cd llvm_mode$ apt-get install clang$ export LLVM_CONFIG=`which llvm-config` && make && cd ...
[AFL++ 405757f4e3c5] ~/work/test2 # afl-gcc ./test2.c -o ./stackoverflow afl-cc++4.22a by Michal Zalewski, Laszlo Szekeres, Marc Heuse - mode: GCC-GCC [!] WARNING: You are using outdated instrumentation, install LLVM and/or gcc-plugin...
$ ./configure --disable-shared CC="afl-gcc" CXX="afl-g++" 2. LLVM模式 LLVM Mode模式编译程序可以获得更快的Fuzzing速度,进入llvm_mode目录进行编译,之后使用afl-clang-fast构建序程序即可,如下所示: $ cd llvm_mode$ apt-get install clang$ export LLVM_CONFIG=`which llvm-config` && make && cd ...
若你的LLVM和clang版本大于等于11,那么你可以启用LLVM LTO模式,使用afl-clang-lto/afl-clang-lto++,该模式通常是最佳的。随后依次是afl-clang-fast/afl-clang-fast++和afl-gcc-fast/afl-g++-fast。 关于为什么LTO模式通常是最佳的,其中一个原因是它解决了原版AFL中边碰撞的情况,提供了无碰撞的边(edge)检测。在...
使用afl-gcc编译程序 CC=afl-clang-fast ./configure --disable-shared CC=afl-clang-fast表示在运行./configure时,将使用aflafl-clang-fast代替系统默认的 C 编译器执行configure文件,afl-clang-fast是 AFL++ 的一个编译器包装器,基于 LLVM 的clang编译器。相比于afl-gcc,afl-clang-fast使用了更现代的插桩技术...
2、LLVM mode (afl-clang-fast/afl-clang-fast++) 依赖LLVM的optimizer,稳定性较高的编译器,用的比较多,可以跨平台(non-x86)编译。 实现了编译级插桩,效果比汇编级插桩更好。 3、GCC_PLUGIN mode (afl-gcc-fast/afl-g++-fast) 效果和LLVM mode差不多,不过依赖的是GCC_plugin,也比较推荐。
由于某种原因afl-gcc工具无法正常工作,因此使用了基于LLVM的工具。需要重写CC为./configure:CC=AFL-clang-fast ./configure 测试中使用了两个简单的测试用例,调用了两个可用的实用程序:echo -ne 'sudo\0ls\0\0' > case1 echo -ne 'sudoedit\0test\0\0' > case2 准备就绪后,以并行模式启动了四个AFL...
如果有源码,用 afl-gcc 或者afl-clang-fast 编译源码,afl 会利用这些工具在编译期间对代码进行插桩,为后面的测试提供代码覆盖率,测试样本的变异则会基于代码覆盖率进行。无源码的话可以使用 qemu 进行插桩 搜集好 初始样本集,如果必要的话使用 afl-cmin 把样本集进行精简。 然后用 afl-fuzz 开始fuzz. 下面对一些...