CompareCoverage 项目常见问题解决方案
项目基础介绍
CompareCoverage(简称 CmpCov)是一个用于 C/C++ 程序和库的 Clang 插桩模块,旨在跟踪代码中的变量和缓冲区比较,并将覆盖数据保存到 sancov
文件中。该项目基于 Clang 编译器中的 SanitizerCoverage 工具,特别是利用了 Tracing data flow 特性。生成的覆盖数据可以作为子指令分析工具,帮助模糊测试工具(如 afl、libFuzzer 和 honggfuzz)更好地处理输入流中的常量和字符串。
主要的编程语言是 C++,但该项目可以与 C 语言编写的软件链接。
新手使用项目时的注意事项及解决方案
1. 编译时缺少 -lstdc++
标志
问题描述:当链接 C++ 库到 C 语言编写的软件时,可能会遇到链接错误,提示缺少 stdc++
库。
解决步骤:
- 在编译命令中添加
-lstdc++
标志。 - 例如,在 Linux 系统上,编译命令应如下所示:
clang++ -c -o cmpcov.o cmpcov.cc -O2 -fPIC clang++ -c -o common.o common.cc -O2 -fPIC clang++ -c -o modules.o modules.cc -O2 -fPIC clang++ -c -o tokenizer.o tokenizer.cc -O2 -fPIC clang++ -c -o traces.o traces.cc -O2 -fPIC ar cr libcmpcov.a cmpcov.o common.o modules.o tokenizer.o traces.o
- 在链接目标软件时,确保添加
-lstdc++
:gcc -o my_program my_program.c -L. -lcmpcov -lstdc++
2. 缺少 Clang 编译器
问题描述:项目依赖于 Clang 编译器,如果系统中没有安装 Clang,编译过程将失败。
解决步骤:
- 安装 Clang 编译器。
- 在 Ubuntu 系统上,可以使用以下命令:
sudo apt-get install clang
- 在 macOS 上,可以使用 Homebrew 安装:
brew install llvm
- 在 Ubuntu 系统上,可以使用以下命令:
- 确保 Clang 版本符合项目要求,通常建议使用 Clang 10 或更高版本。
3. 生成的 sancov
文件格式问题
问题描述:生成的 sancov
文件格式可能不符合预期,导致后续分析工具无法正确解析。
解决步骤:
- 检查编译时是否正确启用了
-fsanitize-coverage=trace-pc-guard
标志。 - 确保目标程序在运行时能够正确生成
sancov
文件。 - 使用项目提供的示例代码进行测试,确保生成的文件格式正确。
- 如果问题仍然存在,可以参考项目文档或提交 Issue 寻求帮助。
通过以上步骤,新手用户可以更好地理解和使用 CompareCoverage 项目,避免常见的编译和运行问题。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考