Skip to content

Commit 70848b8

Browse files
Add comprehensive project analysis report (Chinese version)
This commit adds `PROJECT_ANALYSIS.md`, a detailed report analyzing the `oss-fuzz-gen` project in Chinese. The report covers: - Project overview and purpose. - Architecture and design (workflow, components). - Detailed directory structure analysis. - Analysis of core components (Experiment Runner, Agents, LLM Toolkit). - Technology stack and dependencies. - Usage and workflow instructions. This documentation serves as a high-level guide for understanding the project's structure and functionality.
1 parent 3383d79 commit 70848b8

File tree

1 file changed

+112
-0
lines changed

1 file changed

+112
-0
lines changed

PROJECT_ANALYSIS.md

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
# 项目分析报告:OSS-Fuzz-Gen
2+
3+
## 1. 项目概览
4+
5+
**项目名称:** oss-fuzz-gen
6+
**目的:** 一个用于自动化生成 C/C++、Java 和 Python 项目模糊测试(Fuzz)目标的框架。它利用大语言模型(LLM)并结合 OSS-Fuzz 基础设施来基准测试和评估生成的目标。
7+
**核心目标:** 通过利用 AI 创建能够发现真实漏洞的有效且高覆盖率的模糊测试目标,从而打破“漏洞挖掘障碍”。
8+
9+
## 2. 架构与设计
10+
11+
该项目设计为一个模块化框架,协调以下组件之间的交互:
12+
1. **Benchmarks(基准)**:需要进行模糊测试的代码库(函数或现有测试)。
13+
2. **LLMs(大语言模型)**:用于生成代码的智能核心。
14+
3. **Agents(代理)**:指导 LLM 的逻辑(如原型生成器、增强器等)。
15+
4. **OSS-Fuzz**:用于构建和运行模糊测试目标的执行环境。
16+
17+
### 高层工作流程
18+
1. **初始化**`run_all_experiments.py` 读取基准配置。
19+
2. **分发**:实验被分发(可能并行)到 `run_one_experiment.py`
20+
3. **管道执行**:对每个基准执行代理管道。
21+
* **Prototyper(原型生成器)**:生成初始模糊测试目标。
22+
* **Builder/Fixer(构建/修复器)**:尝试编译目标,如果编译失败,则要求 LLM 修复错误。
23+
* **Evaluator(评估器)**:使用 OSS-Fuzz 基础设施运行目标,以测量覆盖率并检测崩溃。
24+
4. **报告**:汇总结果,将覆盖率与现有的人工编写目标进行比较。
25+
26+
## 3. 目录结构分析
27+
28+
* **`agent/`**:包含不同类型代理的核心逻辑。
29+
* `prototyper.py`:生成初始模糊测试目标原型。
30+
* `enhancer.py`:改进现有目标(例如,增加覆盖率)。
31+
* `analyzer.py`:分析代码或结果。
32+
* `base_agent.py`:代理的抽象基类。
33+
* **`benchmark-sets/`**:定义要进行模糊测试的项目和函数。按语言或实验类型组织(例如 `all`, `c-specific`, `jvm-all`)。YAML 文件定义了具体目标。
34+
* **`llm_toolkit/`**:LLM 提供商的抽象层。
35+
* `models.py`:Vertex AI, OpenAI, Anthropic 模型的封装。
36+
* `prompt_builder.py`:用于从模板构建提示词(Prompt)的工具。
37+
* **`ossfuzz_py/`**:与 OSS-Fuzz 交互的工具,可能处理 Docker 交互和构建过程。
38+
* **`prompts/`**:用于指导 LLM 的基于 XML 的提示词模板。
39+
* **`report/`**:用于从实验结果生成 HTML/JSON 报告的脚本。
40+
* **`tool/`**:外部工具的抽象。
41+
* `container_tool.py`:管理 Docker 容器以进行安全的执行/编译。
42+
* **`run_all_experiments.py`**:批量处理的主要入口点。
43+
* **`run_one_experiment.py`**:单个实验迭代的驱动程序。
44+
45+
## 4. 核心组件
46+
47+
### 4.1. 实验运行器 (`run_all_experiments.py`)
48+
* **并行性**:使用 `multiprocessing.Pool` 并发运行多个实验 (`NUM_EXP`)。
49+
* **基准发现**:可以从目录加载基准 (`--benchmarks-directory`) 或动态生成它们 (`--generate-benchmarks`)。
50+
* **报告**:使用后台进程实时汇总覆盖率增益。
51+
52+
### 4.2. 实验管道 (`run_one_experiment.py`)
53+
* **阶段**
54+
1. **生成**:调用 `Prototyper`(或 `OnePromptPrototyper`)从 LLM 获取代码。
55+
2. **构建与修复循环**:编译代码。如果失败,错误日志将反馈给 LLM 以请求修复。
56+
3. **评估**:运行编译后的二进制文件以测量覆盖率 (`textcov`) 并检测崩溃。
57+
* **配置**:处理诸如 `NUM_SAMPLES`, `MAX_TOKENS`, 和 `TEMPERATURE` 等参数。
58+
59+
### 4.3. 代理 (`agent/`)
60+
* **Prototyper**:创建新目标的主要代理。它构建的提示词包括:
61+
* 项目上下文(如果启用)。
62+
* 有效模糊测试目标的示例。
63+
* 如何调用待测函数的说明。
64+
* **交互**:某些代理 (`FunctionToolPrototyper`) 似乎使用带工具(如容器工具)的聊天循环来迭代编写和验证代码。
65+
66+
### 4.4. LLM 工具包 (`llm_toolkit/`)
67+
* **模型支持**
68+
* **Google Vertex AI**: Gemini (Pro, Ultra, 1.5), Code-bison.
69+
* **OpenAI**: GPT-3.5, GPT-4, GPT-4o.
70+
* **Anthropic**: Claude 3 (Haiku, Sonnet, Opus).
71+
* **弹性**:为 API 错误实现了带指数退避的重试逻辑。
72+
* **提示词处理**:管理令牌(Token)限制和截断策略。
73+
74+
## 5. 技术栈与依赖
75+
76+
* **语言**:Python 3.11+
77+
* **云提供商**:Google Cloud Platform (Vertex AI, Cloud Build, Cloud Storage), Azure (用于 OpenAI)。
78+
* **LLM 库**`google-cloud-aiplatform`, `openai`, `anthropic`.
79+
* **数据处理**`pandas`, `pydantic`.
80+
* **容器化**:Docker(对于隔离构建和模糊测试执行至关重要)。
81+
* **构建工具**`clang`, `libFuzzer`(通过 OSS-Fuzz 镜像)。
82+
83+
## 6. 使用与工作流
84+
85+
### 先决条件
86+
* Python 3.11 环境。
87+
* 已安装并运行 Docker。
88+
* GCP 凭据 (`gcloud auth login`) 或 OpenAI API 密钥。
89+
90+
### 运行实验
91+
1. **选择基准**:例如 `benchmark-sets/comparison/tinyxml2.yaml`
92+
2. **运行命令**
93+
```bash
94+
./run_all_experiments.py \
95+
--model=vertex_ai_gemini-1-5-chat \
96+
--benchmark-yaml=benchmark-sets/comparison/tinyxml2.yaml \
97+
--work-dir=results/my-experiment
98+
```
99+
3. **输出**:结果保存在 `results/my-experiment` 中,包括源代码、构建日志和覆盖率报告。
100+
101+
### 可视化
102+
* `report.web` 模块可以启动本地服务器以查看结果:
103+
```bash
104+
python -m report.web -r results/my-experiment -o report_output
105+
```
106+
107+
## 7. 关键发现与观察
108+
109+
* **现实世界的影响**:该项目声称在 `cJSON`, `sqlite3`, 和 `openssl` 等主要项目中发现了超过 30 个新的错误/漏洞。
110+
* **反馈循环**:尝试编译、捕获错误并要求 LLM 修复它们的能力(`run_one_experiment.py` 中的 `fix_code`)是生成有效 C++ 代码的关键特性。
111+
* **可扩展性**`BaseAgent``LLM` 类使得添加新策略或模型相对容易。
112+
* **容器化**:严重依赖 Docker 确保了可能不安全的生成代码不会危害主机,并在与 OSS-Fuzz 匹配的一致环境中运行。

0 commit comments

Comments
 (0)