以下是壹個語料庫文件的示例:
第壹行用於通知模糊引擎文件的編碼版本。雖然目前還沒有為未來版本計劃編碼格式,但設計必須支持這種可能性。
下面每壹行都是構成語料庫條目的值,必要時可以直接復制到Go代碼中。
在上面的例子中,我們用int64跟隨了壹個[]字節。這些類型必須完全匹配序列中的模糊測試參數。這些類型的模糊目標如下:
指定自己的種子語料庫值的最簡單方法是使用這個(*testing。f)。添加方法。在上面的例子中,它看起來像這樣:
但是,您可能有壹個很大的二進制文件,並且您不想將它作為代碼復制到您的測試中,而是將它作為壹個單獨的種子語料庫條目保存在testdata/fuzz/{FuzzTestName}目錄中。golang.org/x/tools/cmd/file2fuzz上的file2fuzz工具可以用來將這些二進制文件轉換成[]字節。
要使用此工具:
語料庫詞條:語料庫中的壹個輸入,可用於模糊測試。這可以是壹個特殊格式的文件,也可以是壹個(*testing。f)添加。
覆蓋率指導:壹種模糊測試方法,使用代碼覆蓋率的擴展來確定哪些語料庫條目值得保留以備將來使用。
失敗的輸入:失敗的輸入是壹個語料庫條目,在針對模糊目標運行時會導致錯誤或死機。
Fuzz target:模糊測試的目標函數,在模糊測試過程中對語料庫條目和生成的值執行。它是通過將函數傳遞給(*testing來實現的。F).Fuzz。
Fuzz test:壹個名為func FuzzXxx(*testing的函數。f)在測試文件中可用於模糊測試。
Fuzzing:壹種自動測試,它不斷地操縱程序的輸入以找出問題,如代碼可能易受攻擊的錯誤或漏洞。
模糊參數:將被傳遞給模糊測試目標並被mutator變異的參數。
Fuzzing engine:管理Fuzzing的工具,包括維護語料庫、調用mutator、識別新覆蓋和報告失敗。
生成的語料庫:由模糊引擎隨時間維護的語料庫,以及跟蹤進度的模糊測試。它存儲在$GOCACHE/fuzz中。這些條目僅用於模糊測試。
Mutator:模糊測試中使用的壹個工具,它在將語料庫項目傳遞給模糊目標之前隨機操作它們。
包:在同壹目錄下編譯在壹起的源文件的集合。
種子語料庫:用戶提供的用於模糊測試的語料庫,可用於指導模糊引擎。它由f.Add在fuzzy test中提供的語料庫條目和包中testdata/fuzz/{FuzzTestName}目錄下的文件組成。默認情況下,無論是否執行模糊測試,這些條目都使用go test運行。
測試文件:格式為xxx_test.go的文件,可能包含測試、基準、示例和模糊測試。
漏洞:代碼中可能被攻擊者利用的安全敏感漏洞。