建構模糊化工具後,您可以透過幾種方式執行這個函式。
在 Fuchsia 裝置上執行模糊效果
你可以使用 ffx fuzz
工具在本機裝置上執行模糊作業。如要在開發期間執行模糊工具,建議您使用這個方法。這項工具非常實用,因為知道如何尋找模糊相關檔案,以及各種常見的「選項」。
在本機進行模糊化時,使用可透過 ffx fuzz shell
啟動的互動式模糊殼層通常是方便的。此殼層可能會維持與模糊工具的連線,並提供分頁完成等公用程式。這項工具支援多種指令:
- 如何列出可用的模糊工具:
list [-p
] - 如要連線至模糊功能,請視需要啟動:
attach
[-o - 如要取得模糊工具的選項:
get [
] - 如何在模糊工具中設定選項:
set
- 如何在模糊的語料庫中新增輸入內容:
add [--seed]
- 如何使用模糊工具測試特定輸入:
try
- 如何產生輸入內容並模糊目標:
run [--runs
] [--time - 如何清除錯誤輸入內容中多餘的位元組:
cleanse
- 如要縮減錯誤輸入的大小:
minimize [--runs
] [--time - 如要壓縮附加模糊工具的語料庫,請執行下列操作:
merge [--corpus
] - 如要取得模糊工具的執行狀態:
status
- 如何擷取附加模糊背景的語料庫:
fetch [--corpus
] [--seed] - 如要中斷與模糊工具中斷連線但不想停止,請按照下列步驟操作:
detach
- 如何停止連接的模糊工具:
stop
- 如要中斷與模糊處理工具的連線並結束殼層,請按照以下步驟操作:
exit
- 如要清除螢幕畫面:
clear
- 如何列印殼層的指令記錄:
history
component_url附加後,模糊工具元件會透過 stop
指令或測試管理員停止,直到停止為止。您可以先從模糊工具卸離,稍後重新連接。
有幾個指令代表長時間執行的工作流程。其中包含最重要的指令 run
,可執行涵蓋範圍引導模糊作業。這些項目也包含 try
、cleanse
、minimize
和 merge
。上述所有情形可能會無限期執行。
接受輸入的指令可接受檔案和十六進位值。如果提供的輸入內容不明確,ffx fuzz
會將其視為十六進位值並輸出警告。您可以新增路徑元素,強制視為檔案處理,例如,./deadbeef
是檔案,而 deadbeef
是值。
總而言之,一般的工作流程看起來會像這樣 (不含註解):
attach fuchsia-pkg://fuchsia.com/my-fuzzers#meta/my-fuzzer.cm # Connect to the fuzzer.
run -t 60m # Run for up to one hour.
try deadbeef # Try a specific input, e.g. reproduce an error found by the step above.
merge -c my-local-dir # Shrink the corpus as much as possible and save it.
stop
exit
在開發主機上執行模糊測試
您可以執行由 Fuchsia 建構系統建構的主機模糊工具,但系統不支援 ffx fuzz
的額外工具。也就是說,您必須在 fx host-tool
叫用中手動新增任何 libFuzzer 選項。
例如:
fx host-tool my_host_fuzzer -runs=1000
您可以使用 -help=1
查看所有可用選項:
fx host-tool my_host_fuzzer -help=1
在 ClusterFuzz 上執行模糊工具
如果要在初始開發後執行模糊工具,這是最簡單且推薦的方法。如要在 ClusterFuzz 上執行模糊功能,只需確保其是 //bundles/buildbot/core
的 GN 依附元件即可。基本上,這意味著將此程式碼加入程式碼的「tests」GN 目標中。
例如:
group("tests") {
deps = [
":existing-unittest-package",
":my-fuzzers",
]
}
如果不確定依附元件圖表是否包含模糊工具,您可以使用 gn path
檢查。
例如:
fx gn path out/default //bundles/buildbot/core path-to-fuzzer
對於 //examples/fuzzers
,這會產生:
//bundles/buildbot/core --[public]--> //examples:examples --[private]--> //examples/fuzzers:fuzzers 1 non-data path found. It is not public.
該依附元件圖表中的所有模糊工具都將提供給 ClusterFuzz 來選取及執行。如果 ClusterFuzz 開啟錯誤,您可以使用其輸出內容重現發現項目。請參閱處理透過模糊化找到的結果。