[使用教程] GenProg自动修复bug的实现

使用的GenProg版本为V3.2 ( github源码),下面是利用genprog修复bug的配置、安装与实现。

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

  1. $ cd /bin

  2. 执行$ ls -l /bin/sh,会输出如下内容:
    lrwxrwxrwx 1 root root 4 8月 16 19:57 /bin/sh -> dash

  3. 进行如下操作:

    3.1 $ ln -sf bash /bin/sh
    3.2 再次执行$ 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
  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中的相应位置即可。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值