并行符号执行框架近期工作与下一步科研计划
Static HTML rendering of Markdown source.
# 并行符号执行框架近期工作与下一步科研计划
## 摘要
本项目围绕“利用并行符号执行提升 fuzzing 覆盖率”这一目标,对 SymCC/QSYM
式编译型 concolic execution 进行了系统性重构。近期工作不再把符号执行视为
单次路径翻转器,而是把它提升为一个跨编译器、运行时、求解器、AFL 覆盖反馈、
MPI 分布式调度和 agentic 路由的混合执行框架。
核心思想是:将符号执行中的路径、约束、输入结构、目标分支、worker 状态和
覆盖收益统一建模为可学习、可恢复、可分片的执行任务。这样可以减少并行
concolic execution 的重复求解,提升对结构化输入和隐式信息流的覆盖能力,并
为后续科研实验提供可消融、可复现的工程基础。
本阶段已完成从“并行运行多个 SymCC 实例”到“上下文感知的并行混合符号执行
系统”的关键跃迁。下一步工作将集中在三个研究问题上:
1. 如何让 concolic execution 在大规模并行下保持接近线性的有效覆盖收益。
2. 如何把路径树、结构化输入、solver-hostile 约束和 LLM/agentic 推理结合起来。
3. 如何用严格实验、消融和统计检验验证这些优化确实优于现有 SOTA 组合。
## 一、研究定位
项目定位是开发通用并行符号执行框架,并以 fuzzing 覆盖率提升作为主要评价指标。
相关论文常发表于 Security、Software Engineering、Systems 等会议,但本项目的
核心任务是测试生成、路径探索和覆盖优化,不涉及攻击链、利用生成或漏洞武器化。
当前系统的研究对象包括:
- 编译型 concolic instrumentation 的表达能力和低开销传播;
- SMT、polyhedral abstraction、近似求解和反向路径适配的组合;
- AFL bitmap、data coverage、comparison taint 和路径 DAG 的统一反馈;
- MPI 多 worker 下的 seed-worker-state 联合调度;
- 面向结构化输入的 agentic/LLM 路由和验证式回灌。
## 二、近期已完成工作
### 1. Backsolver + Veritesting:从常量 PHI 到 bounded easy-region 合并
近期对 compiler instrumentation 做了关键扩展。此前 Backsolver 只依赖 LLVM
`select` 和少量常量 PHI 生成 ITE 表达式,覆盖范围有限。现在编译器可以识别
canonical two-arm diamond,并将 PHI incoming 值恢复为 ITE:
- incoming 值可以是常量;
- 可以是 merge 点可见的符号 SSA 值;
- 可以是分支内部的 bounded side-effect-free SSA 表达式;
- 支持整数/浮点/指针标量上的算术、比较、cast、select;
- 对 load、store、call、division、remainder、loop 和非规范 CFG 保守回退。
这使 Backsolver 不只处理“常量分类标签”这类隐式流,也能处理分支内部计算后再
merge 的实际程序模式。运行时侧继续使用已有的 ITE controller 枚举、直接候选
验证和 Z3 fallback,保证输出仍经过 concrete replay/表达式求值验证。
相关测试:
- `test/backsolver_symbolic_phi.ll`
- `test/backsolver_veritesting_region.ll`
- `test/backsolver_implicit_flow.ll`
- `test/backsolver_selective_prefix.ll`
科研意义:
- 这是 Backsolver 思想在编译型 concolic 框架中的轻量化实现;
- 它引入了 Veritesting 的静态合并精神,但避免全 CFG 静态符号执行的复杂度;
- 后续可以继续扩展到 loop template、multi-exit region 和 control-dependence IR。
### 2. S2F 式 dual executor 与 actionseed
系统已加入 S2F 风格 actionseed 机制。MPI coordinator 从 prefix DAG 中选择同一
seed 下的多个高价值 open branch,并生成动作文件:
- `solve`:强制精确求解该目标;
- `sample`:使用 sampling executor profile;
- `skip`:记录但跳过低价值分支。
QSYM runtime 读取 `SYMCC_S2F_ACTIONS`,在目标分支 prefix 达到时绕过普通 pruning。
这让符号执行不再只在当前执行路径上“看到一个分支、翻转一个分支”,而是可以由
coordinator 显式注入同一 seed 的多分支计划。
科研意义:
- 将求解策略从 runtime 局部启发式上移到全局 prefix DAG;
- 为 TACO-Fuzz 的 extended path conditions 和 ConcoLLMic 式 agentic route 提供执行载体;
- 允许对 exact/tailored/sampling executor 做细粒度消融。
### 3. TACO-Fuzz + MultiGo:目标中心路径选择与多路径难度建模
`PrefixDAG` 已加入 target-centric 和 multi-path directed hybrid fuzzing 逻辑:
- 维护 site frequency 与 Poisson-style path difficulty;
- 为 target path 记录 visits、reward、distance、under-exploration;
- 在 replay/actionseed 选择中融合 target distance、path difficulty、mutation rarity;
- 对高价值同 seed 分支批量生成 actionseed;
- 将 under-explored target path 作为 seed selection/generation 的核心信号。
科研意义:
- 传统 directed fuzzing 往往只看静态距离,容易反复挖同一条近但不可达路径;
- 当前实现把“路径难度”和“目标路径多样性”显式加入调度;
- 后续可以研究基于 causal bandit 的目标路径因果收益估计。
### 4. Pangolin 式上下文复用与 sampling 求解
运行时已经提供 prefix-sensitive polyhedral/Z3 context reuse:
- 约束上下文按 prefix key 缓存;
- 保存 SAT/UNSAT/model/linear context;
- 支持 polyhedral byte-box sampling、template pair 和 John-walk 风格采样;
- 与 S2F sampling action、AFL hint mutator 和 coordinator telemetry 打通。
科研意义:
- 把符号执行从“一次 query 一个 model”推进到“一个可复用 path context 产生多个候选”;
- 减少多 worker 对相似 prefix 的重复 Z3 调用;
- 为 solver portfolio 学习提供可观测的 cache hit/sample yield。
### 5. AFL 原生 data coverage map 与 comparison taint
编译器/runtime/coordinator 已支持 AFL 原生 data coverage:
- 记录常量比较的 matched prefix bits;
- 记录 comparison taint locality;
- 通过 AFL bitmap feature 和 coordinator dominance policy 进行筛选;
- 生成 `.compact_focus_set`,作为 Gordian-style compact input linearization 的输入。
科研意义:
- code coverage 不足以描述“距离解析成功还差多少字节”;
- data coverage 能提供连续信号,帮助 fuzzer 和 concolic executor 选择更有潜力的 seed;
- comparison taint 是 Cottontail 式结构化路径表示的低成本近似。
### 6. UCSan 式 under-constrained execution
系统已实现 opt-in 的 compilation-based under-constrained execution:
- 支持函数入口 harness 生成;
- structured seed import/export;
- pseudo/shadow pointer metadata;
- lazy JIT object provisioning;
- pointer load/store/memcpy shadow propagation;
- external policy 与 wrapper 配置。
科研意义:
- 允许符号执行从完整程序 fuzzing 进入函数级、对象图级测试;
- 可以弥补 fuzzing 对深层库函数入口到达困难的问题;
- 后续可与 LLM/object-seed synthesis 结合,生成结构化对象初始状态。
### 7. GenSym 式 state-level parallelism
新增 `StateShardCoordinator`,把一个 work item 抽象为 continuation-like state:
```text
state = input_digest/path + focus_slice + target_branch + s2f_actionseed
```
该 state 被 hash 到 `SYMCC_STATE_TASK_SHARDS`,并映射到 owner worker。MPI master
派发时优先选择 worker 本地 shard,必要时允许 bounded work stealing。状态任务的
lease、completion、reward 和 failure 会持久化到 `.state_tasks.json`。
科研意义:
- 这是 GenSym “branching as concurrency/continuations”思想在现有 SymCC/MPI 架构
中的工程化折中;
- 不需要重写整个 symbolic execution compiler,即可获得 continuation-level scheduling;
- 后续可扩展为多 coordinator、多 coverage owner 的分布式符号执行控制面。
### 8. Cottontail / ConcoLLMic / Gordian 式 agentic route
`agentic_concolic_hooks.py` 已从简单 hint 加载扩展为 route-aware planner:
- `cottontail` route:从 comparison taint 学习结构局部 focus slice;
- `concollmic` route:把 target branch 映射为 actionseed solve;
- `gordian` route:把 solver-hostile 的 timeout/unknown/no-output 任务送入 sampling route;
- `hybrid` route:三者同时启用;
- 外部 hints 可覆盖 `focus_bytes`、`focus_set`、`target_branch`、`strategy`、`s2f_actions`、`route`。
默认内置 planner 是确定性的,不主动调用模型;外部 LLM/agent 可以通过
`SYMCC_AGENTIC_OUT`、`SYMCC_AGENTIC_HINTS`、`SYMCC_AGENTIC_CMD` 参与调度。
科研意义:
- 避免把 LLM 放进不可控的 trusted execution loop;
- 让 LLM 作为“可验证候选生成器/调度建议器”,输出仍由 concrete replay 与 coverage triage 验证;
- 为比较 Cottontail、ConcoLLMic、Gordian 风格方法提供同一工程接口。
## 三、当前创新点
### 创新点 1:跨层统一的路径上下文反馈
系统把路径 prefix、solver telemetry、AFL bitmap、data coverage、comparison taint、
target branch、worker 状态和 actionseed 统一进 coordinator 的决策模型。这区别于
传统 hybrid fuzzing 中“fuzzer 管 corpus,symbolic executor 管约束”的松耦合结构。
### 创新点 2:Backsolver 与 Veritesting 的编译型轻量融合
不是实现一个完整静态 symbolic executor,而是在 SymCC instrumentation 阶段恢复
控制依赖值为 ITE,并交给运行时 Backsolver 验证。这是一条工程复杂度较低、适合
现有编译型 concolic 框架的路径。
### 创新点 3:continuation state 分片,而不是 seed 文件分片
并行符号执行的重复主要来自“不同 seed 触发相似 symbolic state”。因此调度单位
从文件提升为:
```text
input + focus + target + action plan
```
这比普通 seed queue 更接近符号执行真实的任务边界,也更适合 work stealing 和恢复。
### 创新点 4:LLM route 与 SMT/replay 的可验证组合
系统不让 LLM 直接决定结果正确性。LLM 或内置 agent 只能改变 route、focus、strategy
和 actionseed,最终候选必须由 target execution、telemetry 和 AFL coverage triage
验证。这为 LLM-assisted symbolic execution 提供了可复现、可消融的实验边界。
## 四、主要技术挑战
### 挑战 1:并行 concolic execution 的结构性冗余
多 worker 并发时,即便输入不同,也可能反复翻转相同下游 branch,产生高度重复的
候选。简单增加 worker 数通常会导致有效覆盖收益快速饱和。
当前缓解手段:
- seed-worker contextual bandit;
- state shard owner-local dispatch;
- prefix DAG replay cooldown;
- bitmap/data feature dominance;
- S2F actionseed 让同一 seed 的多个分支计划化。
后续挑战是证明这些机制在真实 benchmark 上能提高 CPU-hour normalized coverage。
### 挑战 2:静态 region merging 的 soundness 与覆盖范围
当前 Veritesting easy-region 只复制 side-effect-free SSA。扩展到复杂 CFG、loop、
memory read 和 external call 会带来 dominance、UB、alias 和路径条件组合问题。
后续需要:
- 明确 region admissibility 判定;
- 建立 instrumentation soundness 约束;
- 引入 loop template 或 bounded unrolling;
- 对每类 IR pattern 增加 lit + differential replay 测试。
### 挑战 3:LLM/agentic route 的可控性
LLM 可以产生结构化输入,但也可能生成无效、不可复现或污染实验的数据。
当前约束:
- 默认 deterministic planner;
- 外部 hint 只影响调度,不直接接受输出;
- 所有候选仍走 concrete execution 和 coverage triage;
- route policy 可用 `SYMCC_AGENTIC_ROUTE` 消融。
后续需要在实验中区分“LLM 语义收益”和“额外 mutation budget 收益”。
### 挑战 4:评价指标的学术严格性
仅报告 generated count 或单次 coverage 曲线不够。需要 equal CPU budget、重复实验、
置信区间、消融和统计检验。
建议采用:
- edge coverage / branch coverage / data feature coverage;
- time-to-first-target;
- unique useful testcases per CPU-hour;
- solver time、Z3 timeout、cache hit、backsolver sat;
- worker redundancy、state shard steal rate;
- Mann-Whitney U 或 bootstrap confidence interval。
## 五、下一步科研计划
### P0:实验严谨化与论文级评估
目标:把当前工程成果转化为可投稿/可复现实验结果。
任务:
1. 建立 benchmark matrix:
- text parser:json、xml、pcre2、sqlite;
- binary parser:libpng、libjpeg、woff/font;
- compression/archive:zlib、libarchive;
- coreutils-style utility programs;
- synthetic microbenchmarks for implicit flow、state sharding、data coverage。
2. 设计消融组:
- baseline SymCC + AFL;
- + telemetry scheduler;
- + Pangolin poly cache;
- + Backsolver/Veritesting;
- + S2F actionseed;
- + TACO/MultiGo;
- + state shard coordinator;
- + agentic route。
3. 固定 equal CPU budget:
- 1、4、8、16、32 workers;
- 30min、2h、6h 三档;
- 每组至少 20 次随机重复。
4. 输出统计报告:
- coverage curve;
- AUC;
- final coverage;
- confidence interval;
- solver cost breakdown;
- worker redundancy heatmap。
预期论文贡献:
- 一个完整的 parallel hybrid symbolic execution 框架;
- 一组可复现的跨层消融结果;
- 对并行 concolic 冗余瓶颈的实证分析。
### P0:完整 ESCT/ECT 路径结构表示
目标:从当前 branch_trace/data_taint telemetry 推进到 Cottontail 式 expressive
coverage tree。
任务:
1. 将 branch trace、comparison taint、data features、call/ret site、basic block
事件统一成路径树;
2. 为每个节点记录:
- path condition summary;
- input byte dependency;
- parser locality;
- target distance;
- solver outcome;
- generated candidate quality。
3. 输出 JSON schema,供 LLM/agentic route、offline analysis 和 benchmark 复用;
4. 在 coordinator 中用 ESCT 节点替代部分 flat branch list。
技术挑战:
- 控制路径树规模;
- 对 loop 和 repeated parser states 做压缩;
- 保持 telemetry 输出低开销;
- 让 schema 对 SymCC/SymSan/未来 backend 通用。
### P0:state shard coordinator 的多 master 扩展
目标:从单 master 多 worker 扩展到多 coordinator 协同。
任务:
1. 将 `.state_tasks.json` 拆为 append-only shard logs;
2. 将 AFL bitmap delta journal 扩展为 coverage-owner shard;
3. 设计 coordinator 间 gossip/merge 协议;
4. 引入 lease fencing,避免两个 master 同时派发同一 continuation state;
5. 测试非共享文件系统下的 CAS object transport。
科研问题:
- 多 coordinator 下 coverage novelty 如何去重;
- state ownership 与 worker locality 如何平衡;
- gossip 延迟对 useful coverage 的影响。
### P1:Backsolver/Veritesting 的语义扩展
目标:从 canonical diamond 扩展到更一般的 IFSS/easy-region。
任务:
1. 增加 bounded multi-block region discovery;
2. 对 acyclic CFG 做 post-dominator merge 识别;
3. 支持 select/PHI 链式 ITE folding;
4. 引入 memory-read snapshot 条件,尝试处理只读局部内存;
5. 建立 region verifier,拒绝可能改变 concrete semantics 的合成。
挑战:
- alias analysis 精度不足时必须保守;
- LLVM poison/undef/freeze 语义需要显式处理;
- 复杂 region 可能增加公式规模,反而降低求解效率。
### P1:UCSan 对象图 seed synthesis
目标:把 under-constrained execution 从“结构化 seed replay”推进到“对象图生成”。
任务:
1. 设计 object graph grammar;
2. 支持 pointer alias、shared subobject、cycle;
3. 从 crash-free concrete replay 中学习对象形状;
4. 将 LLM/agentic route 用于 object seed mutation;
5. 对函数入口覆盖和全程序 fuzzing 覆盖做联合评价。
挑战:
- pointer validity 与 symbolic pointer arithmetic 的平衡;
- 外部函数 stub 的 soundness;
- seed 空间爆炸与 object graph 最小化。
### P1:SymSan/taint backend 对照实验
目标:验证“表达式构造”和“taint 传播解耦”对当前 coordinator 的收益。
任务:
1. 统一 SymCC 与 SymSan telemetry schema;
2. 同一 AFL/coordinator 下切换 backend;
3. 对比 runtime overhead、coverage、solver query quality;
4. 将 comparison taint 和 focus_set 从 backend-specific 迁移到 engine-neutral 层。
挑战:
- backend 语义差异导致 telemetry 不完全等价;
- taint-only 路径可能生成更少 SMT 表达式,但也可能丢失精确求解机会。
### P2:学习型调度从 bandit 推进到因果/离线强化学习
目标:让调度器学到“哪个 seed-state-route 在当前 corpus 下真正增加覆盖”。
任务:
1. 收集 offline trajectory dataset;
2. 构建 counterfactual replay simulator;
3. 对 LinUCB、Thompson sampling、contextual MDP、offline RL 做比较;
4. 引入 uncertainty-aware route selection;
5. 研究 worker redundancy 作为负 reward 的建模方式。
挑战:
- fuzzing 环境非平稳;
- 同一 action 的收益依赖 concurrent workers;
- offline policy 容易过拟合 benchmark。
### P2:面向论文的系统化理论抽象
目标:将工程系统抽象为一套可解释的模型,提升学术贡献清晰度。
可能抽象:
```text
Hybrid symbolic fuzzing = coverage-guided stochastic search
+ constraint-guided state transition
+ distributed continuation scheduling
+ verified neural/agentic proposal.
```
需要形式化的问题:
- continuation state 的等价关系;
- prefix context reuse 的 soundness 边界;
- verified LLM proposal 的 acceptance criterion;
- data coverage 与 code coverage 的联合 dominance。
## 六、预期论文结构
一个可能的论文框架:
1. Introduction:并行 hybrid fuzzing 的冗余和结构化输入瓶颈;
2. Motivation:三个 motivating examples:
- implicit flow;
- solver-hostile structured parser;
- multi-worker duplicate continuation;
3. Design:
- compiler/runtime telemetry;
- prefix DAG/actionseed;
- state shard coordinator;
- agentic route;
4. Implementation:SymCC/QSYM/AFL/MPI 细节;
5. Evaluation:
- coverage;
- scaling;
- ablation;
- overhead;
- route quality;
6. Discussion:
- soundness boundary;
- LLM verification;
- limitations;
7. Related Work:
- QSYM/SymCC/SymSan;
- Pangolin;
- Backsolver;
- Veritesting;
- GenSym;
- Cottontail/ConcoLLMic/Gordian;
- directed hybrid fuzzing。
## 七、参考文献与技术来源
- Backsolver: Adapting Preceding Execution Paths to Solve Constraints, ACM TOSEM 2025. https://dl.acm.org/doi/10.1145/3712194
- Enhancing Symbolic Execution with Veritesting, ICSE 2014. https://dl.acm.org/doi/10.1145/2568225.2568293
- GenSym: Compiling Parallel Symbolic Execution with Continuations, ICSE 2023. https://dl.acm.org/doi/10.1109/ICSE48619.2023.00116
- Pangolin: Incremental Hybrid Fuzzing with Polyhedral Path Abstraction, IEEE S&P 2020. https://doi.org/10.1109/SP40000.2020.00063
- Cottontail: Large Language Model-Driven Concolic Execution for Highly Structured Test Input Generation, IEEE S&P 2026. https://mboehme.github.io/paper/SP26-cottontail.pdf
- ConcoLLMic: Agentic Concolic Execution, IEEE S&P 2026. https://github.com/ConcoLLMic/ConcoLLMic
- Gordian: LLM-assisted hybrid symbolic execution with ghost code, 2026 preprint. https://arxiv.org/html/2603.19239v1
- Data Coverage for Guided Fuzzing, USENIX Security 2024. https://www.usenix.org/conference/usenixsecurity24/presentation/wang-mingzhe
- MultiGo: Not All Paths Are Equal, ACM TOSEM 2025. https://dl.acm.org/doi/10.1145/3735555
- TACO-Fuzz: Efficient Directed Hybrid Fuzzing via Target-Centric Seed Selection and Generation, OOPSLA 2026. https://2026.splashcon.org/details/oopsla-2026/35/Efficient-Directed-Hybrid-Fuzzing-via-Target-Centric-Seed-Selection-and-Generation
## 八、近期验证状态
最近一次完整验证结果:
- `cmake --build build --target SymCC SymCCRuntime -j2`:通过;
- `python3 -m unittest discover -s test -p 'test_*.py'`:70 个测试通过;
- `lit --path=/usr/lib/llvm-18/bin -v build/test`:53 个 lit 测试通过。
这些测试覆盖 compiler instrumentation、Backsolver/Veritesting、UCSan seed、
S2F actionseed、AFL data coverage、distributed state、agentic hooks、hybrid feedback
和核心运行时集成。