编译AFL llvm_mode持续失败,求助解决办法
解决AFL llvm_mode编译失败的排查步骤
我之前折腾AFL llvm_mode的时候也踩过不少坑,结合你描述的情况,咱们一步步来定位问题:
先补全完整的错误信息
你贴的输出到clang -O3 -funroll-loops -Wall -D_FORTIFY_SOUR...就截断了,后面的编译错误(比如头文件缺失、符号未定义、版本不兼容提示)才是关键。重新执行make,把完整的报错内容贴出来,这能帮咱们直接锁定问题点。验证llvm工具链的版本一致性
很多时候问题出在llvm-config和clang版本不匹配上——哪怕你把多个版本的bin目录加进PATH,系统可能会优先调用旧版本的工具。执行这两个命令确认版本完全一致:llvm-config --version clang --version如果版本不一样,要么调整PATH让目标版本的bin目录优先级最高,要么在make时直接指定llvm-config的绝对路径:
make LLVM_CONFIG=/home/your-user/llvm-6.0/bin/llvm-config确认AFL主程序编译正常
虽然你说“编译完成AFL”,但还是要检查../afl-showmap是否存在且可执行:ls -la ../afl-showmap ../afl-showmap --help如果这个文件损坏或者编译不完整,llvm_mode的make流程会直接卡壳。
匹配AFL与LLVM的版本兼容性
不同版本的AFL对LLVM的支持有差异:- 早期AFL版本(比如afl-2.52b)对LLVM 6.0的支持有小bug,更适配LLVM 4.0;
- 较新的AFL版本(比如afl++)对LLVM 5.0/6.0支持更好。
你可以换个中间版本的LLVM试试,比如LLVM 5.0,同时确保下载的LLVM是完整的预编译包(包含开发库和头文件),不是仅runtime版本。
安装系统依赖库
如果是Ubuntu系统,可能缺少LLVM的开发依赖包,导致编译时找不到头文件。安装对应版本的依赖:# 比如LLVM 6.0的话 sudo apt-get install llvm-6.0-dev libclang-6.0-dev
内容的提问来源于stack exchange,提问作者Daniel Israeli
相关产品推荐
相关产品推荐

