工程開發
libfuzzer avatar

libfuzzer

與 LLVM 工具鏈整合的 C/C++ 專案覆蓋率導向模糊測試工具。

簡介

libFuzzer 是一款專為 C/C++ 應用程式設計的程序內、覆蓋率導向模糊測試工具。作為 LLVM 專案的核心組件,它為使用 Clang 的開發人員提供了無縫的整合體驗。它專門針對需要快速設置且在識別崩潰、記憶體洩漏及未定義行為方面具有可靠效能的專案。透過利用編譯階段提供的檢測機制,libFuzzer 可追蹤程式碼覆蓋率以智慧方式變異輸入,進而探索傳統模糊測試工具可能忽略的深度程式碼路徑。由於其簡潔性、易於維護性以及與現代建置系統的高度相容性,它是大多數 C/C++ 模糊測試任務的首選起點。雖然它針對單進程、單核心執行進行了最佳化,但其測試腳本(harness)結構與 AFL++ 等更進階的工具相容,使其成為未來可能需要分散式、多核心模糊測試專案的絕佳橋樑。

  • 執行程序內、覆蓋率導向的變異模糊測試,以檢測軟體漏洞與崩潰。

  • 使用 -fsanitize=fuzzer 標誌直接整合到現有的 LLVM/Clang 建置流程中。

  • 使用 FuzzedDataProvider 處理複雜的結構化輸入與多參數目標函數。

  • 支援基於腳本的測試,允許對特定邏輯分支與 API 介面進行定向執行。

  • 實作確定性模糊測試,確保發現的錯誤與崩潰可完全重現。

  • 促進高速測試腳本的建立,目標為每秒達到數千次執行。

  • 非常適合需要快速、高效測試關鍵程式碼路徑的 C/C++ 開發人員與安全研究人員。

  • 需要一個名為 LLVMFuzzerTestOneInput 的 C++ 入口函數來接收模糊測試資料。

  • 測試函數必須始終回傳 0,非零回傳碼保留供引擎未來使用。

  • 避免在測試腳本內使用隨機數生成器或未設置種子的熵等非確定性元素。

  • 透過在迭代之間重置全域狀態來維持腳本隔離,防止執行流的交叉污染。

  • 雖然主要是 Linux 工具,但可透過相容的 LLVM 工具鏈安裝在 macOS 與 Windows 上使用。

倉庫統計

Star 數
4,905
Fork 數
428
Open Issue 數
21
主要語言
Python
預設分支
main
同步狀態
閒置
最近同步時間
2026年4月30日 上午10:07
在 GitHub 查看