AFL++编译项目遇some.d文件missing separator错误求助
问题原因
AFL++的afl-gcc-fast/afl-g++-fast默认会输出带ANSI彩色转义序列的日志信息到标准输出(stdout)。当你的真实项目Makefile通过编译器生成依赖文件(.d)时,这些彩色日志会被写入到.d文件的开头,而Make要求.d文件必须是合法的Make规则语法,这些非语法内容直接导致Make解析失败,触发missing separator错误。
演示项目能正常编译,大概率是因为它没有启用自动依赖生成(即没有生成并包含.d文件),或者依赖生成逻辑不依赖编译器的stdout输出,因此没被AFL的日志污染。
解决方法
- 禁用AFL++的彩色输出:在编译命令前添加环境变量
AFL_NO_COLOR=1,让编译器不再输出彩色日志,避免污染.d文件。修改后的编译命令如下:AFL_NO_COLOR=1 CC=*****/afl-gcc-fast CXX=****/afl-g++-fast make myproject - 清理旧的污染依赖文件:先执行
make clean删除已生成的包含日志的.d文件,避免残留文件影响重新编译。 - 验证依赖生成逻辑:检查项目Makefile中生成
.d文件的规则,确保是通过编译器的-M/-MM等参数正确生成依赖,且没有额外捕获到编译器的非依赖输出。如果项目依赖生成是通过自定义脚本实现,需确保脚本过滤掉编译器的日志输出。
内容的提问来源于stack exchange,提问作者ddr
相关产品推荐
相关产品推荐

