编译LLVMFuzzerTestOneInput遇DWARF错误及链接问题求助
解决AFL++编译XPDF 3.02模糊测试Harness的三类问题
1. DWARF错误:invalid or unhandled FORM value: 0x25
这个错误源于高版本GCC生成的DWARF格式超出了AFL++默认解析器的兼容范围,XPDF 3.02作为老版本软件,适配低版本GCC即可解决:
- 安装GCC 8(或7):
sudo apt install gcc-8 g++-8 - 切换默认编译器:
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 80 update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 80 - 编译XPDF时强制生成DWARF2格式:
./configure CC=gcc-8 CXX=g++-8 CFLAGS="-gdwarf-2" CXXFLAGS="-gdwarf-2" make
2. 符号多重定义(如__afl_trace)
这类冲突多因重复链接AFL++运行时库或插桩/静态链接配置矛盾:
- 检查harness代码,避免手动引入
afl-fuzz.h后又叠加-fsanitize=address或重复指定-lafl参数 - 编译harness时只保留必要的AFL++参数,示例命令:
afl-clang-fast++ -o xpdf_harness xpdf_harness.cpp -L./xpdf-3.02/build/lib -lxpdf -lfreetype -ljpeg -lpng -lz - 若静态链接引发冲突,改用动态链接,或编译XPDF时添加
--enable-static=no配置
3. MemStream、PDFDoc相关方法的未定义引用
这是链接阶段未正确关联XPDF的库文件和头文件路径导致的:
- 确认XPDF编译后生成了
libxpdf.a或libxpdf.so,路径无误 - 编译harness时必须指定头文件目录、库目录并链接XPDF库,示例命令:
afl-clang-fast++ -o xpdf_harness xpdf_harness.cpp -I./xpdf-3.02/include -L./xpdf-3.02/lib -lxpdf -lfreetype -ljpeg -lpng -lz -lm - 检查XPDF的
configure选项,确保启用了MemStream相关模块(若XPDF 3.02提供--enable-memstream选项则开启)
内容的提问来源于stack exchange,提问作者Krumelmonster
相关产品推荐
相关产品推荐

