GenProg自动修复bug的实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/clksjx/article/details/78934499

GenProg V3.2 ( github源码

配置环境

将sh修改为bash(ubuntu默认是dash)

  1. # cd /bin
  2. # ls -l /bin/sh,执行之后会输出如下内容:
    lrwxrwxrwx 1 root root 4 8月 16 19:57 /bin/sh -> dash
  3. 进行如下操作:
    • # ln -sf bash /bin/sh //软链接 -f表示强制
    • 再次执行# ls -l /bin/sh,输出如下内容:
      lrwxrwxrwx 1 root root 4 2008-05-01 22:51 /bin/sh -> bash

dash与bash的区别:
1. 有人把ash从NetBSD移植到Linux并更名为 dash (Debian Almquist Shell),并建议将 /bin/.sh 指向它,以获得更快的脚本执行速度。Dash Shell 比 Bash Shell 小的多,符合POSIX标准。
2. Debian和Ubuntu中,/bin/.sh默认已经指向dash,这是一个不同于bash的shell,它主要是为了执行脚本而出现,而不是交互,它速度更快,但功能相比bash要少很多,语法严格遵守POSIX标准。

安装opam

opam会方便CIL的安装。
1. # apt-get install opam
2. # opam init (运行过程中需要选择N)
3. # eval opam config env

安装ocaml

OCaml是函数式编程语言,强项是程序分析。
1. # apt-get install ocaml

安装CIL,v1.3.7

需要使用CIL来解析C,对AST进行操作。

  • 如果安装了opam

    1. # opam install cil
    2. 如果安装失败,按照提示执行# opam depext conf-m4.1
  • 如果没有安装opam

    1. 下载CIL package,并确认已经安装了OCaml compiler,perl,和ocamlfind
    2. #cd cil
    3. ./configure
    4. make
    5. make cillib
    6. 在~/.bashrc中添加export CIL=/home/claire/cil

修改genprog源代码的权限

  1. cd到genprog源代码的上层目录,执行# chmod -R 777 genprog-code-master/

编译repair

  1. cd到genprog-code-master/src目录下,执行make,执行成功之后会产生一个repair可执行文件

执行repair

  • cd到test目录下,打开gcd-1-findsrepair.test,查看其中的内容并了解gcd-1-findsrepair.configure中的执行参数。
--seed 560680701  //设置随机种子
--compiler gcc  //指定编译器为gcc
--program gcd.c  //指定需要修复的程序为gcd.c
--pos-tests 5  //指定正测试用例个数
--neg-tests 1  //指定反测试用例个数
--search ga  //使用遗传方式搜索
--promut 1  //每次变异产生的变异体个数
--popsize 40  //用来产生变异体的人口个数
--generations 0  //执行的迭代的代数
--label-repair  //显示修复的位置
  1. 若是第一次执行,则需要先执行一次gcd-1-findsrepair.test,然后cd到gcd-test文件夹下,执行gcd-1-findsrepair.test中的后半部分,即#../../src/repair ../gcd-1-findsrepair.config。因为第一次执行.test时,缺少gcd.cache,会报错。如果再次执行时,直接执行.test,gcd.cache会被清理,仍然出现错误。所以需要先执行一次完整的.test,产生gcd.cache,然后再执行.test的后半部分。
  2. 执行成功之后,gcd-test文件夹内会出现新的文件repair.c,这就是修复gcd.c之后的新的程序。
  3. 如需修复其他文件,则按照上述流程,修改.test中的相应位置即可。

猜你喜欢

转载自blog.csdn.net/clksjx/article/details/78934499