0%

跑协议遇到的问题

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
2
3
4
5
#terminate running server(s)
pkill fftp
ftpclean
$replayer $f FTP $pno 1 > /dev/null 2>&1 &
timeout -k 0 -s SIGUSR1 3s ./fftp fftp.conf $pno > /dev/null 2>&1

pkill主要是防止启动服务前有端口占用等情况

------------- Thank you for reading -------------

Title - Artist
0:00