1、libmodbus的使用
1、重点关注项目下的3个文件夹:doc,src,tests
doc文件夹包含库的使用文档,文件名就是函数名,介绍每个函数的使用方法,参数定制,返回值说明,示例代码等。
src文件夹包含源文件和头文件,我们只需要把这些文件添加到工程中,然后包含头文件就可以直接使用了。
tests文件夹包含libmodbus使用示例。
2、使用autoconf构建makefile文件
./configure CC=gcc CXX=g++ CFLAGS="-g -fprofile-arcs -ftest-coverage"
“-fprofile-arcs -ftest-coverage” 这个参数开启插桩编译。
“Run ./autogen.sh
first to generate the configure
script if required.”
3、执行tests下的测试程序产生 *.gcda 文件
# 生成覆盖率文本报告
lcov -c -d . -o test.info --rc lcov_branch_coverage=1
# 生成覆盖率网页报告
genhtml --branch-coverage -o result test.info
执行命令后,可以看到一个 result 文件夹,在里面就是对应的网页版覆盖率报告。
2、LightFTP
Q:不能生成.gcda覆盖率文件?
A:因为程序没有正常结束,需要输入q来结束程序才行,不可以用ctrl+c。
或者添加信号处理函数。
3、live555
可以使用VLC工具来查看meidia推送的音乐、视频等资源
3、AFLNet报错
内存限制问题:-p 协议名 -m none
4、profuzzbench相关问题
1)Dockerfile
fuzzer(AFLNet) 的git链接对不对,涉及到补丁能不能正确补上,以支持相关协议测试。
COPY命令确保原文件本身有执行权限,要不然COPY过去权限一样的
为了收集覆盖率,协议源码往往需要修改主函数能够处理中断信号
2)run.sh
启动被测服务,以及AFLNet发包测试,一般没什么问题
3)cov_.sh
使用AFLNet的重放来获取
1 | #terminate running server(s) |
pkill主要是防止启动服务前有端口占用等情况