● 8 个核心模块 · 交互式可视化

用图形理解
程序分析的本质

从控制流图到污点分析,本实验室以零依赖的单文件形式,将编译器与静态分析的核心算法可视化为可交互的图形。点击、迭代、观察不动点如何在图上收敛。

8分析模块
0外部依赖
SVG原生渲染
MIT开源协议
01 / CONTROL FLOW GRAPH

控制流图 (CFG)

将程序划分为基本块 (Basic Block),用有向边刻画控制转移,并计算支配关系 (Dominators) 与直接支配者 (idom),构成支配树。点击节点查看其支配集。

CFG · DOMINATOR TREE
选中基本块的支配集
点击任意基本块以查看其支配关系与直接支配者。
02 / DATA-FLOW ANALYSIS

数据流分析

通过工作表 (Worklist) 反复迭代,直至 IN/OUT 集合达到不动点 (Fixpoint)。切换到达定义、活跃变量与可用表达式,观察前向/后向、并集/交集的不同收敛行为。

ITERATIVE FIXPOINT
迭代状态
选择分析类型并点击“单步迭代”观察集合变化。
03 / POINTER ANALYSIS · ANDERSEN

指针分析

基于 Andersen 包含约束 (p ⊇ q, p ⊇ {o}),通过迭代求解各指针的指向集 (points-to set),直至约束闭包不再变化。逐步应用约束,观察指向集的传播。

POINTS-TO SETS
约束与求解日志
约束已加载。点击“应用一轮约束”开始求解。
04 / ABSTRACT INTERPRETATION

抽象解释

在具体域与抽象域之间建立伽罗瓦连接 (Galois Connection),用区间 [a,b] 近似变量取值。对循环使用加宽 (Widening) 算子加速收敛,避免无限迭代。

INTERVAL ABSTRACTION · WIDENING
伽罗瓦连接 · 区间演化
模拟循环 x=x+1 (x∈[0,100]) 的区间抽象。点击迭代观察区间如何加宽到 ⊤ 后再收敛。
05 / STATIC SINGLE ASSIGNMENT

静态单赋值 (SSA)

在每个合并点的支配边界 (Dominance Frontier) 处插入 φ 函数,并对变量重命名,使每个变量仅被赋值一次。切换查看 φ 插入与重命名后的 SSA 形式。

DOMINANCE FRONTIER · PHI
支配边界与 φ 函数
高亮显示各基本块的支配边界 DF(B)。在 DF 处插入 φ 函数。
06 / INTERPROCEDURAL ANALYSIS

过程间分析

构造调用图 (Call Graph),区分上下文不敏感 (CI) 与上下文敏感 (CS) 分析。开启上下文敏感后,被调函数按调用上下文克隆,精度提升但开销增长。

CALL GRAPH
调用图构造日志
函数调用关系已分析。切换上下文敏感模式观察克隆数量变化。
07 / SYMBOLIC EXECUTION

符号执行

以符号变量探索程序路径,累积路径条件 (Path Condition) 并交由约束求解器判定可达性。展开执行树,直观感受路径爆炸 (Path Explosion) 问题。

EXECUTION TREE · PATH CONDITIONS
路径条件与求解结果
点击“展开一层”生成分支路径。绿色=可满足(SAT),红色=不可满足(UNSAT),黄色=未求解。
08 / TAINT ANALYSIS

污点分析

标记不可信 Source(如用户输入),沿数据流追踪污点传播,检测是否到达危险 Sink(如 SQL/exec)。逐步传播,观察 Source → Sink 的污点路径。

SOURCE → SINK TAINT FLOW
污点传播日志
source=getInput() 已标记。点击“传播一步”追踪污点流向 sink。