工作区(Workspace)目录结构解析¶
Lian分析框架将中间产物持久化于lian_workspace目录中。文件采用基于Feather格式的.bundle(数据)与.indexing(索引)存储,支持大规模代码的高效加载。
1. frontend (编译前端)¶
存储源代码翻译为通用中间表示(GIR)及基础符号映射的信息。
| 文件名 | 内容说明 |
|---|---|
gir.bundle* / .indexing |
全量GIR指令,包含operation、operands、stmt id及源码行号 |
module_symbols |
模块与文件索引表,记录unit_id与物理路径、语言类型的映射 |
unique_symbol_ids |
维护项目全局唯一的符号id分配流水状态 |
2. semantic_p1 (基础结构分析)¶
存储函数的控制流、作用域树、符号声明等基础数据。
| 文件名 | 内容说明 |
|---|---|
cfg.bundle* / .indexing |
函数控制流图边信息,记录语句间的跳转关系与分支类型 |
scope_hierarchy.bundle* / .indexing |
作用域嵌套树,记录父子作用域关系、类型及起止stmt id |
scope_to_symbol_info.bundle* / .indexing |
记录每个作用域内直接定义的符号及其id、声明位置 |
scope_to_available_scope_ids.bundle* / .indexing |
各作用域向上查找符号的词法链,用于作用域寻址 |
stmt_id_to_scope_id |
指令id到其所属作用域id的映射映射表 |
symbol_name_to_scope_ids.bundle* / .indexing |
符号名称在项目中所有出现过的作用域id集合 |
symbol_name_to_decl_ids.bundle* / .indexing |
符号名称在全项目中所有的声明位置集合 |
unit_export_symbols.indexing |
模块对外导出的符号集合,用于跨文件解析import关系 |
defined_symbols_p1.bundle* / .indexing |
P1阶段每条指令定义的变量符号集合 |
used_symbols.bundle* / .indexing |
P1阶段每条指令引用的变量符号集合 |
defined_states_p1.bundle* / .indexing |
P1阶段指令定义的内存状态节点集合 |
stmt_status_p1.bundle* / .indexing |
语句级分析状态,记录入口与出口的活跃变量位向量映射 |
s2space_p1.bundle* / .indexing |
符号-状态空间,存储符号与初始内存状态节点的对应关系 |
symbol_bit_vector_p1.indexing |
符号位向量管理器的索引,将定义点映射到位向量位置 |
call_graph_p1 |
初始调用图,记录词法层面可确定的函数调用关系 |
call_stmt_format |
调用语句元数据,含被调名、参数数量及Receiver信息 |
method_internal_callees |
函数内部包含的所有调用点的stmt id列表 |
method_def_use_summary |
函数级符号摘要,含形参、局部变量及返回值的符号集 |
import_graph / import_graph_nodes |
符号层级的导入关系图,描述变量/函数的跨文件来源 |
import_deps |
文件层级的依赖图,用于规划分析任务的拓扑顺序 |
method_decl_format |
函数声明元数据,包括所属类、起始位置、参数量等 |
method_id_to_name |
函数id到可读全名(含类名前缀)的映射 |
method_to_stmt_id |
函数id到其函数体内所有包含指令id的映射 |
method_to_parameter_id |
函数id到其按序排列的形参符号id的映射 |
unit_to_stmt_id |
文件unit_id到其中包含的所有指令id的映射 |
unit_to_method_id |
文件unit_id到其中定义的全部函数id的映射 |
unit_to_variable_id |
文件unit_id对应的全局/模块级变量定义位置 |
type_graph |
类型层级图,记录类继承、接口实现等面向对象关系 |
entry_points |
程序分析入口点列表,决定P3全局分析的起点 |
grouped_methods |
按模块或类组织的函数分组索引,优化批量加载性能 |
3. semantic_p2 (局部语义分析)¶
存储从下而上计算的函数摘要及局部状态流关系。
| 文件名 | 内容说明 |
|---|---|
s2space_p2.indexing |
指针分析精化后的符号-状态空间,包含准确的别名关系 |
state_flow_graph_p2.indexing |
局部状态流图,描述函数内内存状态间的传递 |
space_summary_p2.indexing |
函数行为摘要模板,记录形参/返回值间的数据流副作用 |
stmt_status_p2.indexing |
P2指令状态快照,携带状态级活跃位向量 |
callee_parameter_mapping_p2.indexing |
调用点处实参与被调方形参的状态传递映射记录 |
symbol_graph.indexing |
符号级依赖图,记录符号间的直接数据流演化 |
defined_symbols_p2 / defined_states_p2 |
经过过程间传播后确认的符号与状态定义集合 |
symbol_bit_vector_p2 / state_bit_vector_p2 |
P2阶段符号与状态的位向量压缩管理索引 |
class_to_method_id.indexing |
类id到底层所有可用方法实现(含继承方法)的映射 |
4. semantic_p3 (全局语义分析)¶
存储从入口点出发、携带完整上下文实例化后的全局语义数据。
| 文件名 | 内容说明 |
|---|---|
state_flow_graph_p3.bundle* / .indexing |
全局状态流图,连接跨函数节点的拓扑结构,污点分析的直接底座 |
s2space_p3.bundle* / .indexing |
全局上下文敏感的符号-状态空间,反映实例化后的内存布局 |
space_summary_p3.indexing |
特定调用链路下的函数行为实例摘要 |
stmt_status_p3.bundle* / .indexing |
精确到上下文的最终指令状态,含全局数据流位向量 |
symbol_graph_p3.indexing |
全局符号依赖图,描述跨函数边界的符号依赖 |
defined_symbols_p3.bundle* / .indexing |
全局视角下确定的符号定义点集合 |
callee_parameter_mapping_p3.indexing |
针对特定上下文实例化后的参数传递映射记录 |
state_bit_vector_p3 / symbol_bit_vector_p3 |
全局实例化节点对应的位向量压缩索引 |