iT邦幫忙

2022 iThome 鐵人賽

DAY 26
1
DevOps

Golang X DevOps系列 第 26

Day26 - Introduce to Golang Fuzzing (2)

  • 分享至 

  • xImage
  •  
  • 我們昨天已經把 main.go 的架構跟 fuzz test 放上去了

  • 所以目前架構會長這樣

Project/
├── reverse_test.go
├──  main.go
└── go.mod

Fuzz

  • 接著我們可以透過輸入下面的指令來執行 fuzzing
go test -fuzz=Fuzz
  • 這句指令的意思是 他會根據我們昨天說的 Seed Corpus 來生成隨機資料,並用於 Fuzzing Test裡面

  • 假如你的 *.test.go裡面有包含 Fuzzing 和 Unit Test,不加參數執行 go test的話就是預設兩個都會執行

  • 接著他就會開始執行 fuzzing

p.s 防毒軟體可能會把 Go 的 fuzz 執行擋擋掉

  • 結果會跟下面這張圖類似

  • 這時候你去觀察目錄,你會發現會變成下面這樣

Project/
├── testdata/
├── reverse_test.go
├──  main.go
└── go.mod
  • 他會產生一個 testdata 的資料夾在當前目錄下,這個 testdata 裡面是我們的 Seed 檔,假如你測試失敗的話,他就會把導致錯誤的資料丟到裡面的檔案當中
  • 點開那個檔案看一下
go test fuzz v1
string("ᓿ")
  • 那這筆資料就是引起錯誤的檔案啦,假如你下次再次 go test 且不帶參數,系統一樣會把這筆測資再測一次
  • 那代表上面那個奇怪的符號就是導致錯誤的元兇了,假如你今天的 parameter 比較多個,那檔案裡面就會有跟參數一樣多的測資
  • 可以看到說就算不加 -fuzz 也會失敗

有可能你跑 fuzzing 的結果會跟我不一樣,甚至直接 RUN SUCCESS,前面有講到說 seed 的選擇會跟 Fuzz 的效率有關,所以有可能只是 seed 選得不好而已,可以換幾組 Seed 再多跑幾次


上一篇
Day25 - Introduce to Golang Fuzzing
下一篇
Day 27 - Introduce to Golang Fuzzing (3)
系列文
Golang X DevOps30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言