本项目实现了从头文件 API 抽取、Prompt 构造、LLM 代码生成、编译验证、fuzz 执行到覆盖率反馈迭代的完整流程。
Header Parser -> Prompt Generator -> LLM Code -> Validator -> Fuzzer -> Coverage -> Feedback
核心入口:src/main.py
.
├── src/
│ ├── main.py
│ ├── config/experiment.yaml
│ ├── dgf_header_parser/
│ ├── dgf_prompt_generator/
│ ├── dgf_validator/
│ ├── dgf_feedback/
│ ├── dgf_pipeline/
│ └── dgf_common/
├── tests/
├── requirements.txt
├── requirements-dev.txt
└── pyproject.toml
- Python 3.9+
- clang/llvm(建议 14+)
- 支持 libFuzzer 的编译环境
可选环境变量:
OPENAI_API_KEY(必需,除非使用本地src/dgf_prompt_generator/config.py)OPENAI_BASE_URL(可选)OPENAI_MODEL(默认gpt-4.1-mini)OPENAI_TEMPERATURE(默认0.2)LIBCLANG_PATH(可选,如/usr/lib/llvm-14/lib/libclang.so.1)
python -m venv .venv
source .venv/bin/activate
pip install -r requirements-dev.txt将目标库放到:
testdata/cJSON
并确保其可被 clang include/link(src/config/experiment.yaml 已给出默认路径模板)。
PYTHONPATH=src python src/main.py --config src/config/experiment.yamlPYTHONPATH=src python src/dgf_pipeline/run_pipeline.py \
--api_json data/extracted_api.json \
--output_dir data/feedback_results \
--samples 5 \
--clang_path clang \
--include_dirs testdata/cJSON \
--lib_dir testdata/cJSON/build \
--libs cjson cjson_utils主配置:src/config/experiment.yaml
api_extraction:头文件扫描路径、include 路径、抽取 JSON 输出位置prompt_generation:seed driver 数量、每个 driver 的 API 数、include 模板、API 前缀过滤feedback_iteration:每轮样本数与 fuzz 超时validator:clang 路径、include 路径、库目录与库名
ruff check src
mypy src
pytest仓库已包含 GitHub Actions 工作流(.github/workflows/ci.yml)用于自动执行上述检查。
如不想依赖环境变量,可复制:
src/dgf_prompt_generator/config.example.py -> src/dgf_prompt_generator/config.py
并填写 API 配置。config.py 默认不提交到仓库。