執行模糊遊戲

建構模糊化工具後,您可以透過幾種方式執行這個函式。

在 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,可執行涵蓋範圍引導模糊作業。這些項目也包含 trycleanseminimizemerge。上述所有情形可能會無限期執行。

接受輸入的指令可接受檔案和十六進位值。如果提供的輸入內容不明確,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/coreGN 依附元件即可。基本上,這意味著將此程式碼加入程式碼的「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 開啟錯誤,您可以使用其輸出內容重現發現項目。請參閱處理透過模糊化找到的結果