---
# System prepended metadata

title: Daikon不變量檢測工具的安裝

---

# Daikon不變量檢測工具的安裝
:::warning
1.以下使用nano作為文本編輯器

安裝：
```
sudo apt install nano
```

2.如果某一步驟卡住 可以按enter試試看 按enter後等一下沒意外就可以繼續跑了
:::

## 安裝java
### 安裝 java 11 openjdk
```
sudo apt update
sudo apt install openjdk-11-jdk
```
### 確認版本
```
java -version
```
出現以下訊息表示安裝成功，版本為11.0.19
![](https://hackmd.io/_uploads/S1dvNe3D3.png)

### 設定環境變數
安裝好java後，先到下列目錄確認java的根目錄
```
cd /usr/lib/jvm/
ls
```
![](https://hackmd.io/_uploads/B1fQSg3D3.png)
確定為java-1.11.0-openjdk-amd64
之後修改環境變數檔案，將java的bin/java加入環境變數
```
sudo nano /etc/environment
```
添加下列文字到檔案中（不要修改PATH）
```
JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
```
會發現路徑為剛剛確認的java根目錄，之後按下：
ctrl+o （保存）
ctrl+x （退出）
![](https://hackmd.io/_uploads/BJIFUghvn.png)
修改後需要重新套用/etc/environment的設定
```
source /etc/environment
```
確認設定成功
```
echo $JAVA_HOME
```
![](https://hackmd.io/_uploads/BkokPe3Dn.png)



## DAIKON安裝
### 建立名為daiknparent資料夾，並下載daikon到其之下，並解壓縮，得到daikon
```
mkdir daikonparent 
cd daikonparent
wget http://plse.cs.washington.edu/daikon/download/daikon-5.8.16.tar.gz
tar zxf daikon-5.8.16.tar.gz
```
### 設定daikon的環境變數
```
cd
sudo nano .bashrc
```
![](https://hackmd.io/_uploads/SJSpwgnP2.png)
加入下列文字到最下面
```
export DAIKONDIR=daikonparent/daikon-5.8.16
source $DAIKONDIR/scripts/daikon.bashrc
```
:::info
DAIKONDIR的路徑不用雙引號
:::

![](https://hackmd.io/_uploads/rJq5OlhPn.png)
之後套用設定
```
source .bashrc
```
:::danger
成功畫面如下
![](https://hackmd.io/_uploads/SyAxtg2P3.png)
如果出現任何訊息都代表設定錯誤，請檢查上面的步驟或路徑名稱
:::


### 安裝kvasir
```
cd $DAIKONDIR
cd ..
git clone https://github.com/codespecs/fjalar.git
```
### 安裝相關套件
```
sudo apt install gcc
sudo apt install binutils-dev
sudo apt install zlib1g-dev
```
:::info
zlib1g-dev中的b1g中間的文字是羅馬數字的"一"
:::

### 安裝automake
```
sudo apt install make
```

### 建置kvasir
```
cd $DAIKONDIR
sudo make kvasir
```

### 建置daikon
```
sudo make -C $DAIKONDIR rebuild-everything
```
### 編譯daikon
```
make -C $DAIKONDIR compile
make -C $DAIKONDIR daikon.jar
```

### 測試是否安裝成功
```
cd $DAIKONDIR/examples/c-examples/wordplay
gcc -gdwarf-2 -no-pie wordplay.c -o wordplay
kvasir-dtrace ./wordplay -f words.txt 'Daikon Dynamic Invariant Detector'
java -cp $DAIKONDIR/daikon.jar daikon.Daikon --config_option daikon.derive.Derivation.disable_derived_variables=true  daikon-output/wordplay.decls daikon-output/wordplay.dtrace
```
出現這樣就代表成功
![](https://hackmd.io/_uploads/SJJ7xb3w3.png)
並且會生成 inv.gz檔案
![](https://hackmd.io/_uploads/H1zOlbhDn.png)


保存檔案
```
java -cp $DAIKONDIR/daikon.jar daikon.PrintInvariants wordplay.inv.gz > yourfilename.txt
```

後面的txt檔案的名字隨便改成你自己想要的名字，這裡用wordplay.txt
![](https://hackmd.io/_uploads/SkHlZ-3Pn.png)

檔案內容如下
```
sudo nano wordplay.txt
```
![](https://hackmd.io/_uploads/BkC---nD2.png)


reference:https://plse.cs.washington.edu/daikon/download/doc/daikon/index.html#Top





