GenProg自動修復bug的實現
阿新 • • 發佈:2018-11-05
GenProg V3.2 ( github原始碼)
配置環境
將sh修改為bash(ubuntu預設是dash)
# cd /bin
# ls -l /bin/sh
,執行之後會輸出如下內容:
lrwxrwxrwx 1 root root 4 8月 16 19:57 /bin/sh -> dash
- 進行如下操作:
# 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
# opam install cil
- 如果安裝失敗,按照提示執行
# opam depext conf-m4.1
如果沒有安裝opam
- 下載CIL package,並確認已經安裝了OCaml compiler,perl,和ocamlfind
#cd cil
./configure
make
make cillib
- 在~/.bashrc中新增
export CIL=/home/claire/cil
- 下載CIL package,並確認已經安裝了OCaml compiler,perl,和ocamlfind
修改genprog原始碼的許可權
- cd到genprog原始碼的上層目錄,執行
# chmod -R 777 genprog-code-master/
編譯repair
- 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 //顯示修復的位置
- 若是第一次執行,則需要先執行一次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的後半部分。 - 執行成功之後,gcd-test資料夾內會出現新的檔案repair.c,這就是修復gcd.c之後的新的程式。
- 如需修復其他檔案,則按照上述流程,修改.test中的相應位置即可。