环境配置
请先根据手册上的内容下载github里的实验内容。 首先下载docker,进入官网https://www.docker.com/,windows用户选择AMD64,进行下载安装。(使用Linux的同学应该可以跳过这一步)
安装完成之后打开,跳过注册,将docker挂在后台运行。
打开VSCODE,安装插件:
进入lab1的目录,按shift+鼠标右键,然后选择通过VSCODE打开。
打开之后按下F1,按照手册上的操作输入:Rebuild and Reopen in Container
如果在过程中出错,在命令行里输入docker pull ecnusa/ecnu-sa-labs,完成后可以再次尝试。(可能需要挂梯子)
实验流程
首先点击文件夹c_programs,然后手动一个个分析程序,看看有没有除零的错误。
例:
在这里显然当b输入‘0’时,a=b/a会发生错误。(被除数为0)
而在该程序中,
尽管有c=a/b,但无论如何都不可能会发生b=0的情况,所以程序是没有问题的。
在文件夹下打开answer.txt,把判断结果填入ground truth这一列中,如果有除零问题就填入wrong,没有就填入right.
然后直接执行:
make check_versions && make all
会出现分析结果,在该文件夹中:
点进去检查,afl检查有无crash:
csa_logs则查看有无类似警告:
c_programs/test2.c:8:16: warning: Division by zero [core.DivideZero]
8 | k += 100 / (j - i);
| ~~~~^~~~~~~~~
1 warning generated.
如果检查出错误则填入reject,否则填入accept,在answer.txt中这两列填入:
最后计算它们的precison和recall,计算方式可以查看这篇文章(如果忘记了上课讲的内容和那张图的话):
https://blog.csdn.net/W1995S/article/details/114988637
最后回答这三个问题:
Question 1: From the given programs, can AFL be a sound analysis? Can it be complete?
Question 2: From the given programs, can CSA be a sound analysis? Can it be complete?
Question 3: What are the pros and cons of using the CSA to find divide-by-zero errors? Comment
on both the accuracy and cost of the analyzer under these two domains.
回答完之后返回lab1文件夹下,点击鼠标右键(如果安装了git的话),打开git bash,输入如下命令提交:
git add results/ answers.txt
git commit -m "your commit message here"
git push