第12章 过程间分析

比较调用图、上下文敏感性、Datalog、指针分析、BDD与安全漏洞检测的过程间分析;用编译流水线、状态轨迹和等价性验证门交付调用图、上下文摘要、Datalog事实/规则、固定点与告警证据

学习目标

  • 能说明“第12章 过程间分析”如何比较调用图、上下文敏感性、Datalog、指针分析、BDD与安全漏洞检测的过程间分析,并区分Pearson英文第二版、中文译本、现代工具和本站重写
  • 能先预测“调用上下文、堆抽象和指向关系怎样影响精度、成本与安全结论?”会改变哪一个输入、表示、栈/图状态、IR、目标代码或验证结果,再操作三类交互证据
  • 能只注入“忽略反射加载的目标后把不完整调用图当作无漏洞证明”,定位首个偏离“调用图、上下文键、抽象对象、流敏感性、规则、固定点和告警路径一致”的状态,并从同一快照完成恢复

为什么从这个问题开始

“第12章 过程间分析”围绕“调用上下文、堆抽象和指向关系怎样影响精度、成本与安全结论?”建立贯穿任务:在含虚调用、反射、别名和污点传播的小程序上运行过程间分析。先写下哪个输入、表示、栈/图状态、IR、目标代码或验证结果会最先变化,再运行参考、故障和恢复路径;运行后补理由不算预测。只有守住“调用图、上下文键、抽象对象、流敏感性、规则、固定点和告警路径一致”并交付调用图、上下文摘要、Datalog事实/规则、固定点与告警证据,编译成功、分析收敛、目标码长度或基准加速才构成机制证据。

原版书目、556个正式坐标与访问边界

“第12章 过程间分析”以Pearson官方书页核对Alfred V. Aho、Monica S. Lam、Ravi Sethi、Jeffrey D. Ullman著 Compilers: Principles, Techniques, and Tools, Second Edition:英文精装ISBN 9780321486813,2006年版;Pearson明确列出12章与两个附录,并说明第10章“指令级并行”、第11章“并行与局部性优化”、第12章“过程间分析”是第二版新增重点。Pearson官方目录继续核对版本与章/附录框架。

“第12章 过程间分析”再以中文版完整目录高校馆藏书目核对赵建华、郑滔、戴新宇译《编译原理(第2版)》,机械工业出版社,2009年,631页,ISBN 9787111251217。正式分母计入12个章标题、2个附录标题、533个数字编号节/小节和附录A的9个编号节,合计556个核心目录层级;章末总结、练习、参考文献和索引不重复计为知识节点。

原书与译本均受版权保护,“第12章 过程间分析”不复制、翻译或改写原文、图表、算法伪码和练习,只把官方目录当作范围坐标;中文讲解、状态轨迹、反例、交互、练习与答案均为独立教学重写。本页独立核对 1只用于核对现代IR、工具或实验边界,不反向证明原书采用本站表述。

原版目录层级与可验证机制

第12章 过程间分析

正式坐标 1/41。 原版目录键 第12章 过程间分析。在“第12章 过程间分析”的第1个正式坐标中,「第12章 过程间分析」通过把源级值、地址、类型、控制边和定义—使用关系编码为IR推进过程间上下文、指针关系与安全分析;复核者保存AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表,出现类型、phi输入、控制边、地址或定义—使用关系错位就撤回结论。

12·1 基本概念

正式坐标 2/41。 原版目录键 12.1 基本概念。围绕“调用上下文、堆抽象和指向关系怎样影响精度、成本与安全结论?”,“第12章 过程间分析”在坐标2把「12·1 基本概念」落实为把“基本概念”放进过程间上下文、指针关系与安全分析的输入—状态—变换—验证链;只有第12章 过程间分析的输入角色、中间状态、输出、反例与等价性证据可重放且反例排除只复述“基本概念”名称而没有可观察状态、单故障和恢复验证,本节点才算掌握。

12·1·1 调用图

正式坐标 3/41。 原版目录键 12.1.1 调用图。“第12章 过程间分析”的目录节点3「12·1·1 调用图」不能停在术语或伪码:它要追踪栈帧、非局部绑定、根集、堆对象和收集阶段,交付活动记录、访问链、根集、对象图、写屏障与暂停统计,并把生命周期、根集或屏障错误导致悬垂引用、泄漏或误回收设为单一反事实。

12·1·2 上下文敏感性

正式坐标 4/41。 原版目录键 12.1.2 上下文敏感性。对“第12章 过程间分析”而言,「12·1·2 上下文敏感性」在第4次检查中改变可观察状态,因为它负责求解调用、上下文、指向与污点关系并声明精度/成本边界;调用图、上下文摘要、Datalog事实/规则、固定点与告警路径必须与“调用图、上下文键、抽象对象、流敏感性、规则、固定点和告警路径一致”对齐,不能接受不完整调用目标或堆抽象被误当作无漏洞证明。

12·1·3 调用串

正式坐标 5/41。 原版目录键 12.1.3 调用串。在“第12章 过程间分析”的第5个正式坐标中,「12·1·3 调用串」通过追踪栈帧、非局部绑定、根集、堆对象和收集阶段推进过程间上下文、指针关系与安全分析;复核者保存活动记录、访问链、根集、对象图、写屏障与暂停统计,出现生命周期、根集或屏障错误导致悬垂引用、泄漏或误回收就撤回结论。

12·1·4 基于克隆的上下文相关分析

正式坐标 6/41。 原版目录键 12.1.4 基于克隆的上下文相关分析。围绕“调用上下文、堆抽象和指向关系怎样影响精度、成本与安全结论?”,“第12章 过程间分析”在坐标6把「12·1·4 基于克隆的上下文相关分析」落实为求解调用、上下文、指向与污点关系并声明精度/成本边界;只有调用图、上下文摘要、Datalog事实/规则、固定点与告警路径可重放且反例排除不完整调用目标或堆抽象被误当作无漏洞证明,本节点才算掌握。

12·1·5 基于摘要的上下文相关分析

正式坐标 7/41。 原版目录键 12.1.5 基于摘要的上下文相关分析。“第12章 过程间分析”的目录节点7「12·1·5 基于摘要的上下文相关分析」不能停在术语或伪码:它要求解调用、上下文、指向与污点关系并声明精度/成本边界,交付调用图、上下文摘要、Datalog事实/规则、固定点与告警路径,并把不完整调用目标或堆抽象被误当作无漏洞证明设为单一反事实。

12·2 为什么需要过程间分析

正式坐标 8/41。 原版目录键 12.2 为什么需要过程间分析。对“第12章 过程间分析”而言,「12·2 为什么需要过程间分析」在第8次检查中改变可观察状态,因为它负责把源级值、地址、类型、控制边和定义—使用关系编码为IR;AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表必须与“调用图、上下文键、抽象对象、流敏感性、规则、固定点和告警路径一致”对齐,不能接受类型、phi输入、控制边、地址或定义—使用关系错位。

12·2·1 虚方法调用

正式坐标 9/41。 原版目录键 12.2.1 虚方法调用。在“第12章 过程间分析”的第9个正式坐标中,「12·2·1 虚方法调用」通过追踪栈帧、非局部绑定、根集、堆对象和收集阶段推进过程间上下文、指针关系与安全分析;复核者保存活动记录、访问链、根集、对象图、写屏障与暂停统计,出现生命周期、根集或屏障错误导致悬垂引用、泄漏或误回收就撤回结论。

12·2·2 指针别名分析

正式坐标 10/41。 原版目录键 12.2.2 指针别名分析。围绕“调用上下文、堆抽象和指向关系怎样影响精度、成本与安全结论?”,“第12章 过程间分析”在坐标10把「12·2·2 指针别名分析」落实为声明阶段接口、名字/类型/状态角色和源—目标语义映射;只有阶段快照、符号表、类型、IR谱系、诊断和源位置可重放且反例排除阶段边界丢失绑定、类型、控制依赖或源位置,本节点才算掌握。

12·2·3 并行化

正式坐标 11/41。 原版目录键 12.2.3 并行化。“第12章 过程间分析”的目录节点11「12·2·3 并行化」不能停在术语或伪码:它要把资源、延迟、数据/内存/控制依赖和寄存器压力映射到周期表,交付依赖图、周期表、资源占用、寄存器压力与异常反例,并把非法移动跨越依赖、守卫、异常或资源限制设为单一反事实。

12·2·4 软件错误和安全漏洞的检测

正式坐标 12/41。 原版目录键 12.2.4 软件错误和安全漏洞的检测。对“第12章 过程间分析”而言,「12·2·4 软件错误和安全漏洞的检测」在第12次检查中改变可观察状态,因为它负责求解调用、上下文、指向与污点关系并声明精度/成本边界;调用图、上下文摘要、Datalog事实/规则、固定点与告警路径必须与“调用图、上下文键、抽象对象、流敏感性、规则、固定点和告警路径一致”对齐,不能接受不完整调用目标或堆抽象被误当作无漏洞证明。

12·2·5 SQL注入

正式坐标 13/41。 原版目录键 12.2.5 SQL注入。在“第12章 过程间分析”的第13个正式坐标中,「12·2·5 SQL注入」通过求解调用、上下文、指向与污点关系并声明精度/成本边界推进过程间上下文、指针关系与安全分析;复核者保存调用图、上下文摘要、Datalog事实/规则、固定点与告警路径,出现不完整调用目标或堆抽象被误当作无漏洞证明就撤回结论。

12·2·6 缓冲区溢出

正式坐标 14/41。 原版目录键 12.2.6 缓冲区溢出。围绕“调用上下文、堆抽象和指向关系怎样影响精度、成本与安全结论?”,“第12章 过程间分析”在坐标14把「12·2·6 缓冲区溢出」落实为把字符位置、正则规则、自动机状态、最长匹配和token属性连接起来;只有正则—NFA—DFA映射、状态轨迹、接受/回退与token流可重放且反例排除规则优先级、最长匹配、预读或输入边界错误,本节点才算掌握。

12·3 数据流的逻辑表示

正式坐标 15/41。 原版目录键 12.3 数据流的逻辑表示。“第12章 过程间分析”的目录节点15「12·3 数据流的逻辑表示」不能停在术语或伪码:它要求解数据流固定点并证明变换在所有控制流路径上保语义,交付格值迭代、交汇/转移、收敛日志、前后CFG和等价性测试,并把边界值、不可执行路径、别名或单调性假设错误设为单一反事实。

12·3·1 Datalog简介

正式坐标 16/41。 原版目录键 12.3.1 Datalog简介。对“第12章 过程间分析”而言,「12·3·1 Datalog简介」在第16次检查中改变可观察状态,因为它负责求解调用、上下文、指向与污点关系并声明精度/成本边界;调用图、上下文摘要、Datalog事实/规则、固定点与告警路径必须与“调用图、上下文键、抽象对象、流敏感性、规则、固定点和告警路径一致”对齐,不能接受不完整调用目标或堆抽象被误当作无漏洞证明。

12·3·2 Datalog规则

正式坐标 17/41。 原版目录键 12.3.2 Datalog规则。在“第12章 过程间分析”的第17个正式坐标中,「12·3·2 Datalog规则」通过求解调用、上下文、指向与污点关系并声明精度/成本边界推进过程间上下文、指针关系与安全分析;复核者保存调用图、上下文摘要、Datalog事实/规则、固定点与告警路径,出现不完整调用目标或堆抽象被误当作无漏洞证明就撤回结论。

12·3·3 内涵谓词和外延谓词

正式坐标 18/41。 原版目录键 12.3.3 内涵谓词和外延谓词。围绕“调用上下文、堆抽象和指向关系怎样影响精度、成本与安全结论?”,“第12章 过程间分析”在坐标18把「12·3·3 内涵谓词和外延谓词」落实为把“内涵谓词和外延谓词”放进过程间上下文、指针关系与安全分析的输入—状态—变换—验证链;只有第12章 过程间分析的输入角色、中间状态、输出、反例与等价性证据可重放且反例排除只复述“内涵谓词和外延谓词”名称而没有可观察状态、单故障和恢复验证,本节点才算掌握。

12·3·4 Datalog程序的执行

正式坐标 19/41。 原版目录键 12.3.4 Datalog程序的执行。“第12章 过程间分析”的目录节点19「12·3·4 Datalog程序的执行」不能停在术语或伪码:它要求解调用、上下文、指向与污点关系并声明精度/成本边界,交付调用图、上下文摘要、Datalog事实/规则、固定点与告警路径,并把不完整调用目标或堆抽象被误当作无漏洞证明设为单一反事实。

12·3·5 Datalog程序的增量求值

正式坐标 20/41。 原版目录键 12.3.5 Datalog程序的增量求值。对“第12章 过程间分析”而言,「12·3·5 Datalog程序的增量求值」在第20次检查中改变可观察状态,因为它负责求解调用、上下文、指向与污点关系并声明精度/成本边界;调用图、上下文摘要、Datalog事实/规则、固定点与告警路径必须与“调用图、上下文键、抽象对象、流敏感性、规则、固定点和告警路径一致”对齐,不能接受不完整调用目标或堆抽象被误当作无漏洞证明。

12·3·6 有问题的Datalog规则

正式坐标 21/41。 原版目录键 12.3.6 有问题的Datalog规则。在“第12章 过程间分析”的第21个正式坐标中,「12·3·6 有问题的Datalog规则」通过求解调用、上下文、指向与污点关系并声明精度/成本边界推进过程间上下文、指针关系与安全分析;复核者保存调用图、上下文摘要、Datalog事实/规则、固定点与告警路径,出现不完整调用目标或堆抽象被误当作无漏洞证明就撤回结论。

12·4 一个简单的指针分析算法

正式坐标 22/41。 原版目录键 12.4 一个简单的指针分析算法。围绕“调用上下文、堆抽象和指向关系怎样影响精度、成本与安全结论?”,“第12章 过程间分析”在坐标22把「12·4 一个简单的指针分析算法」落实为求解调用、上下文、指向与污点关系并声明精度/成本边界;只有调用图、上下文摘要、Datalog事实/规则、固定点与告警路径可重放且反例排除不完整调用目标或堆抽象被误当作无漏洞证明,本节点才算掌握。

12·4·1 指针分析为什么困难

正式坐标 23/41。 原版目录键 12.4.1 指针分析为什么困难。“第12章 过程间分析”的目录节点23「12·4·1 指针分析为什么困难」不能停在术语或伪码:它要求解调用、上下文、指向与污点关系并声明精度/成本边界,交付调用图、上下文摘要、Datalog事实/规则、固定点与告警路径,并把不完整调用目标或堆抽象被误当作无漏洞证明设为单一反事实。

12·4·2 指针和引用的模型

正式坐标 24/41。 原版目录键 12.4.2 指针和引用的模型。对“第12章 过程间分析”而言,「12·4·2 指针和引用的模型」在第24次检查中改变可观察状态,因为它负责求解调用、上下文、指向与污点关系并声明精度/成本边界;调用图、上下文摘要、Datalog事实/规则、固定点与告警路径必须与“调用图、上下文键、抽象对象、流敏感性、规则、固定点和告警路径一致”对齐,不能接受不完整调用目标或堆抽象被误当作无漏洞证明。

12·4·3 流不敏感

正式坐标 25/41。 原版目录键 12.4.3 流不敏感。在“第12章 过程间分析”的第25个正式坐标中,「12·4·3 流不敏感」通过把“流不敏感”放进过程间上下文、指针关系与安全分析的输入—状态—变换—验证链推进过程间上下文、指针关系与安全分析;复核者保存第12章 过程间分析的输入角色、中间状态、输出、反例与等价性证据,出现只复述“流不敏感”名称而没有可观察状态、单故障和恢复验证就撤回结论。

12·4·4 使用Datalog的形式化

正式坐标 26/41。 原版目录键 12.4.4 使用Datalog的形式化。围绕“调用上下文、堆抽象和指向关系怎样影响精度、成本与安全结论?”,“第12章 过程间分析”在坐标26把「12·4·4 使用Datalog的形式化」落实为求解调用、上下文、指向与污点关系并声明精度/成本边界;只有调用图、上下文摘要、Datalog事实/规则、固定点与告警路径可重放且反例排除不完整调用目标或堆抽象被误当作无漏洞证明,本节点才算掌握。

12·4·5 使用类型信息

正式坐标 27/41。 原版目录键 12.4.5 使用类型信息。“第12章 过程间分析”的目录节点27「12·4·5 使用类型信息」不能停在术语或伪码:它要把源级值、地址、类型、控制边和定义—使用关系编码为IR,交付AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表,并把类型、phi输入、控制边、地址或定义—使用关系错位设为单一反事实。

12·5 上下文无关的过程间分析

正式坐标 28/41。 原版目录键 12.5 上下文无关的过程间分析。对“第12章 过程间分析”而言,「12·5 上下文无关的过程间分析」在第28次检查中改变可观察状态,因为它负责构造项目集与分析表并重放栈、输入和错误恢复决定;FIRST/FOLLOW、项目闭包、动作/转移表、栈轨迹与冲突必须与“调用图、上下文键、抽象对象、流敏感性、规则、固定点和告警路径一致”对齐,不能接受展望符、状态合并或恢复动作让分析器接受错误串或拒绝合法串。

12·5·1 方法调用的影响

正式坐标 29/41。 原版目录键 12.5.1 方法调用的影响。在“第12章 过程间分析”的第29个正式坐标中,「12·5·1 方法调用的影响」通过追踪栈帧、非局部绑定、根集、堆对象和收集阶段推进过程间上下文、指针关系与安全分析;复核者保存活动记录、访问链、根集、对象图、写屏障与暂停统计,出现生命周期、根集或屏障错误导致悬垂引用、泄漏或误回收就撤回结论。

12·5·2 使用Datalog发现调用图

正式坐标 30/41。 原版目录键 12.5.2 使用Datalog发现调用图。围绕“调用上下文、堆抽象和指向关系怎样影响精度、成本与安全结论?”,“第12章 过程间分析”在坐标30把「12·5·2 使用Datalog发现调用图」落实为追踪栈帧、非局部绑定、根集、堆对象和收集阶段;只有活动记录、访问链、根集、对象图、写屏障与暂停统计可重放且反例排除生命周期、根集或屏障错误导致悬垂引用、泄漏或误回收,本节点才算掌握。

12·5·3 动态加载和反射

正式坐标 31/41。 原版目录键 12.5.3 动态加载和反射。“第12章 过程间分析”的目录节点31「12·5·3 动态加载和反射」不能停在术语或伪码:它要求解调用、上下文、指向与污点关系并声明精度/成本边界,交付调用图、上下文摘要、Datalog事实/规则、固定点与告警路径,并把不完整调用目标或堆抽象被误当作无漏洞证明设为单一反事实。

12·6 上下文相关的指针分析

正式坐标 32/41。 原版目录键 12.6 上下文相关的指针分析。对“第12章 过程间分析”而言,「12·6 上下文相关的指针分析」在第32次检查中改变可观察状态,因为它负责求解调用、上下文、指向与污点关系并声明精度/成本边界;调用图、上下文摘要、Datalog事实/规则、固定点与告警路径必须与“调用图、上下文键、抽象对象、流敏感性、规则、固定点和告警路径一致”对齐,不能接受不完整调用目标或堆抽象被误当作无漏洞证明。

12·6·1 上下文和调用串

正式坐标 33/41。 原版目录键 12.6.1 上下文和调用串。在“第12章 过程间分析”的第33个正式坐标中,「12·6·1 上下文和调用串」通过追踪栈帧、非局部绑定、根集、堆对象和收集阶段推进过程间上下文、指针关系与安全分析;复核者保存活动记录、访问链、根集、对象图、写屏障与暂停统计,出现生命周期、根集或屏障错误导致悬垂引用、泄漏或误回收就撤回结论。

12·6·2 向Datalog规则中加入上下文

正式坐标 34/41。 原版目录键 12.6.2 向Datalog规则中加入上下文。围绕“调用上下文、堆抽象和指向关系怎样影响精度、成本与安全结论?”,“第12章 过程间分析”在坐标34把「12·6·2 向Datalog规则中加入上下文」落实为求解调用、上下文、指向与污点关系并声明精度/成本边界;只有调用图、上下文摘要、Datalog事实/规则、固定点与告警路径可重放且反例排除不完整调用目标或堆抽象被误当作无漏洞证明,本节点才算掌握。

12·6·3 关于敏感性的进一步观察

正式坐标 35/41。 原版目录键 12.6.3 关于敏感性的进一步观察。“第12章 过程间分析”的目录节点35「12·6·3 关于敏感性的进一步观察」不能停在术语或伪码:它要把“关于敏感性的进一步观察”放进过程间上下文、指针关系与安全分析的输入—状态—变换—验证链,交付第12章 过程间分析的输入角色、中间状态、输出、反例与等价性证据,并把只复述“关于敏感性的进一步观察”名称而没有可观察状态、单故障和恢复验证设为单一反事实。

12·7 使用BDD实现Datalog

正式坐标 36/41。 原版目录键 12.7 使用BDD实现Datalog。对“第12章 过程间分析”而言,「12·7 使用BDD实现Datalog」在第36次检查中改变可观察状态,因为它负责求解调用、上下文、指向与污点关系并声明精度/成本边界;调用图、上下文摘要、Datalog事实/规则、固定点与告警路径必须与“调用图、上下文键、抽象对象、流敏感性、规则、固定点和告警路径一致”对齐,不能接受不完整调用目标或堆抽象被误当作无漏洞证明。

12·7·1 二叉决策图

正式坐标 37/41。 原版目录键 12.7.1 二叉决策图。在“第12章 过程间分析”的第37个正式坐标中,「12·7·1 二叉决策图」通过把“二叉决策图”放进过程间上下文、指针关系与安全分析的输入—状态—变换—验证链推进过程间上下文、指针关系与安全分析;复核者保存第12章 过程间分析的输入角色、中间状态、输出、反例与等价性证据,出现只复述“二叉决策图”名称而没有可观察状态、单故障和恢复验证就撤回结论。

12·7·2 BDD上的变换

正式坐标 38/41。 原版目录键 12.7.2 BDD上的变换。围绕“调用上下文、堆抽象和指向关系怎样影响精度、成本与安全结论?”,“第12章 过程间分析”在坐标38把「12·7·2 BDD上的变换」落实为求解调用、上下文、指向与污点关系并声明精度/成本边界;只有调用图、上下文摘要、Datalog事实/规则、固定点与告警路径可重放且反例排除不完整调用目标或堆抽象被误当作无漏洞证明,本节点才算掌握。

12·7·3 使用BDD表示关系

正式坐标 39/41。 原版目录键 12.7.3 使用BDD表示关系。“第12章 过程间分析”的目录节点39「12·7·3 使用BDD表示关系」不能停在术语或伪码:它要求解调用、上下文、指向与污点关系并声明精度/成本边界,交付调用图、上下文摘要、Datalog事实/规则、固定点与告警路径,并把不完整调用目标或堆抽象被误当作无漏洞证明设为单一反事实。

12·7·4 将关系运算实现为BDD运算

正式坐标 40/41。 原版目录键 12.7.4 将关系运算实现为BDD运算。对“第12章 过程间分析”而言,「12·7·4 将关系运算实现为BDD运算」在第40次检查中改变可观察状态,因为它负责求解调用、上下文、指向与污点关系并声明精度/成本边界;调用图、上下文摘要、Datalog事实/规则、固定点与告警路径必须与“调用图、上下文键、抽象对象、流敏感性、规则、固定点和告警路径一致”对齐,不能接受不完整调用目标或堆抽象被误当作无漏洞证明。

12·7·5 使用BDD进行指向分析

正式坐标 41/41。 原版目录键 12.7.5 使用BDD进行指向分析。在“第12章 过程间分析”的第41个正式坐标中,「12·7·5 使用BDD进行指向分析」通过求解调用、上下文、指向与污点关系并声明精度/成本边界推进过程间上下文、指针关系与安全分析;复核者保存调用图、上下文摘要、Datalog事实/规则、固定点与告警路径,出现不完整调用目标或堆抽象被误当作无漏洞证明就撤回结论。

先预测,再操作三个章专属实验

分步1 / 3

1. 输入、表示与翻译流水线

为“第12章 过程间分析”选择正式目录坐标,在参考流水线与单一故障间切换,逐阶段核对输入、变换、输出和不变量。

输入—表示—翻译流水线

第12章 过程间分析

选择正式目录坐标,再比较参考编译合同与单一故障的首个状态分岔。

阶段 1/4

第12章 过程间分析 · 输入与表示

输入
在含虚调用、反射、别名和污点传播的小程序上运行过程间分析
变换
冻结过程间上下文、指针关系与安全分析所需的源程序、文法/IR/机器版本、shape和符号角色
输出证据
第12章 过程间分析的输入合同、版本表与基线快照
不变量检查
第12章 过程间分析的源位置、名字、类型、控制/数据依赖和可见性没有越界

第12章 过程间分析的可重放协议

阶段允许动作必留证据拒绝条件
第12章 过程间分析 · 输入与表示冻结过程间上下文、指针关系与安全分析所需的源程序、文法/IR/机器版本、shape和符号角色第12章 过程间分析的输入合同、版本表与基线快照未满足“第12章 过程间分析的源位置、名字、类型、控制/数据依赖和可见性没有越界”
第12章 过程间分析 · 状态变换执行比较调用图、上下文敏感性、Datalog、指针分析、BDD与安全漏洞检测的过程间分析的最小算法并保存每一步状态第12章 过程间分析的参考轨迹、故障轨迹与首个状态分岔未满足“第12章 过程间分析每一步可由同一输入、规则、版本和顺序复算”
第12章 过程间分析 · 输出与代价比较变换前后IR/目标状态、诊断、资源或分析精度第12章 过程间分析的前后差、语义映射、代价和恢复路径未满足“第12章 过程间分析没有把编译成功、分析收敛或单一基准加速当作完整正确性”
第12章 过程间分析 · 独立验证重放预测、单故障、恢复和不适用边界第12章 过程间分析的接受、回退或拒绝理由未满足“第12章 过程间分析满足“调用图、上下文键、抽象对象、流敏感性、规则、固定点和告警路径一致””
unit: "dbc-unit-12"
question: "调用上下文、堆抽象和指向关系怎样影响精度、成本与安全结论?"
scenario: "在含虚调用、反射、别名和污点传播的小程序上运行过程间分析"
invariant: "调用图、上下文键、抽象对象、流敏感性、规则、固定点和告警路径一致"
fault: "忽略反射加载的目标后把不完整调用图当作无漏洞证明"
evidence: "调用图、上下文摘要、Datalog事实/规则、固定点与告警证据"
reset: restore_concept_mode_stage_trace_step_case_gates_and_artifact

“第12章 过程间分析”要求从同一源程序、文法/IR/机器版本、规则、预算和执行顺序重放参考、故障与恢复路径。重置后若目录选择、模式、阶段、轨迹步骤、案例、证据门或交付包没有回到基线,本次比较已经混入状态泄漏。

本页回顾

掌握“第12章 过程间分析”不是背术语、表格或伪码,而是围绕“调用上下文、堆抽象和指向关系怎样影响精度、成本与安全结论?”重建输入、表示、状态变换、输出、代价和独立验证,并用“调用图、上下文键、抽象对象、流敏感性、规则、固定点和告警路径一致”拒绝“忽略反射加载的目标后把不完整调用图当作无漏洞证明”。最终交付为调用图、上下文摘要、Datalog事实/规则、固定点与告警证据。

练习与答案

练习

  1. 问题 1:编译合同。 “第12章 过程间分析”为什么必须先冻结源程序、文法/IR/机器版本、规则、预算和验证口径?
  1. 问题 2:目录逐项覆盖。 怎样证明“第12章 过程间分析”的正式目录坐标已经进入机制、交互和练习?
  1. 问题 3:故障恢复。 怎样证明“忽略反射加载的目标后把不完整调用图当作无漏洞证明”已经被修正?

名词解释

名词解释

本章出现的专业名词,用大白话再讲一遍。

过程间分析

检索键 dbc-A 对应正式目录坐标「第12章 过程间分析」;在“第12章 过程间分析”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

基本概念

检索键 dbc-B 对应正式目录坐标「12·1 基本概念」;在“第12章 过程间分析”中用于把“基本概念”放进过程间上下文、指针关系与安全分析的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

调用图

检索键 dbc-C 对应正式目录坐标「12·1·1 调用图」;在“第12章 过程间分析”中用于追踪栈帧、非局部绑定、根集、堆对象和收集阶段,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

上下文敏感性

检索键 dbc-D 对应正式目录坐标「12·1·2 上下文敏感性」;在“第12章 过程间分析”中用于求解调用、上下文、指向与污点关系并声明精度/成本边界,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

调用串

检索键 dbc-E 对应正式目录坐标「12·1·3 调用串」;在“第12章 过程间分析”中用于追踪栈帧、非局部绑定、根集、堆对象和收集阶段,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

基于克隆的上下文相关分析

检索键 dbc-F 对应正式目录坐标「12·1·4 基于克隆的上下文相关分析」;在“第12章 过程间分析”中用于求解调用、上下文、指向与污点关系并声明精度/成本边界,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

基于摘要的上下文相关分析

检索键 dbc-G 对应正式目录坐标「12·1·5 基于摘要的上下文相关分析」;在“第12章 过程间分析”中用于求解调用、上下文、指向与污点关系并声明精度/成本边界,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

为什么需要过程间分析

检索键 dbc-H 对应正式目录坐标「12·2 为什么需要过程间分析」;在“第12章 过程间分析”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

虚方法调用

检索键 dbc-I 对应正式目录坐标「12·2·1 虚方法调用」;在“第12章 过程间分析”中用于追踪栈帧、非局部绑定、根集、堆对象和收集阶段,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

指针别名分析

检索键 dbc-J 对应正式目录坐标「12·2·2 指针别名分析」;在“第12章 过程间分析”中用于声明阶段接口、名字/类型/状态角色和源—目标语义映射,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

并行化

检索键 dbc-K 对应正式目录坐标「12·2·3 并行化」;在“第12章 过程间分析”中用于把资源、延迟、数据/内存/控制依赖和寄存器压力映射到周期表,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

软件错误和安全漏洞的检测

检索键 dbc-L 对应正式目录坐标「12·2·4 软件错误和安全漏洞的检测」;在“第12章 过程间分析”中用于求解调用、上下文、指向与污点关系并声明精度/成本边界,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

SQL注入

检索键 dbc-M 对应正式目录坐标「12·2·5 SQL注入」;在“第12章 过程间分析”中用于求解调用、上下文、指向与污点关系并声明精度/成本边界,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

缓冲区溢出

检索键 dbc-N 对应正式目录坐标「12·2·6 缓冲区溢出」;在“第12章 过程间分析”中用于把字符位置、正则规则、自动机状态、最长匹配和token属性连接起来,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

数据流的逻辑表示

检索键 dbc-O 对应正式目录坐标「12·3 数据流的逻辑表示」;在“第12章 过程间分析”中用于求解数据流固定点并证明变换在所有控制流路径上保语义,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

Datalog简介

检索键 dbc-P 对应正式目录坐标「12·3·1 Datalog简介」;在“第12章 过程间分析”中用于求解调用、上下文、指向与污点关系并声明精度/成本边界,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

Datalog规则

检索键 dbc-Q 对应正式目录坐标「12·3·2 Datalog规则」;在“第12章 过程间分析”中用于求解调用、上下文、指向与污点关系并声明精度/成本边界,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

内涵谓词和外延谓词

检索键 dbc-R 对应正式目录坐标「12·3·3 内涵谓词和外延谓词」;在“第12章 过程间分析”中用于把“内涵谓词和外延谓词”放进过程间上下文、指针关系与安全分析的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

Datalog程序的执行

检索键 dbc-S 对应正式目录坐标「12·3·4 Datalog程序的执行」;在“第12章 过程间分析”中用于求解调用、上下文、指向与污点关系并声明精度/成本边界,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

Datalog程序的增量求值

检索键 dbc-T 对应正式目录坐标「12·3·5 Datalog程序的增量求值」;在“第12章 过程间分析”中用于求解调用、上下文、指向与污点关系并声明精度/成本边界,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

有问题的Datalog规则

检索键 dbc-U 对应正式目录坐标「12·3·6 有问题的Datalog规则」;在“第12章 过程间分析”中用于求解调用、上下文、指向与污点关系并声明精度/成本边界,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

一个简单的指针分析算法

检索键 dbc-V 对应正式目录坐标「12·4 一个简单的指针分析算法」;在“第12章 过程间分析”中用于求解调用、上下文、指向与污点关系并声明精度/成本边界,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

指针分析为什么困难

检索键 dbc-W 对应正式目录坐标「12·4·1 指针分析为什么困难」;在“第12章 过程间分析”中用于求解调用、上下文、指向与污点关系并声明精度/成本边界,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

指针和引用的模型

检索键 dbc-X 对应正式目录坐标「12·4·2 指针和引用的模型」;在“第12章 过程间分析”中用于求解调用、上下文、指向与污点关系并声明精度/成本边界,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

流不敏感

检索键 dbc-Y 对应正式目录坐标「12·4·3 流不敏感」;在“第12章 过程间分析”中用于把“流不敏感”放进过程间上下文、指针关系与安全分析的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

使用Datalog的形式化

检索键 dbc-Z 对应正式目录坐标「12·4·4 使用Datalog的形式化」;在“第12章 过程间分析”中用于求解调用、上下文、指向与污点关系并声明精度/成本边界,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

使用类型信息

检索键 dbc-AA 对应正式目录坐标「12·4·5 使用类型信息」;在“第12章 过程间分析”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

上下文无关的过程间分析

检索键 dbc-AB 对应正式目录坐标「12·5 上下文无关的过程间分析」;在“第12章 过程间分析”中用于构造项目集与分析表并重放栈、输入和错误恢复决定,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

方法调用的影响

检索键 dbc-AC 对应正式目录坐标「12·5·1 方法调用的影响」;在“第12章 过程间分析”中用于追踪栈帧、非局部绑定、根集、堆对象和收集阶段,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

使用Datalog发现调用图

检索键 dbc-AD 对应正式目录坐标「12·5·2 使用Datalog发现调用图」;在“第12章 过程间分析”中用于追踪栈帧、非局部绑定、根集、堆对象和收集阶段,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

动态加载和反射

检索键 dbc-AE 对应正式目录坐标「12·5·3 动态加载和反射」;在“第12章 过程间分析”中用于求解调用、上下文、指向与污点关系并声明精度/成本边界,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

上下文相关的指针分析

检索键 dbc-AF 对应正式目录坐标「12·6 上下文相关的指针分析」;在“第12章 过程间分析”中用于求解调用、上下文、指向与污点关系并声明精度/成本边界,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

上下文和调用串

检索键 dbc-AG 对应正式目录坐标「12·6·1 上下文和调用串」;在“第12章 过程间分析”中用于追踪栈帧、非局部绑定、根集、堆对象和收集阶段,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

向Datalog规则中加入上下文

检索键 dbc-AH 对应正式目录坐标「12·6·2 向Datalog规则中加入上下文」;在“第12章 过程间分析”中用于求解调用、上下文、指向与污点关系并声明精度/成本边界,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

关于敏感性的进一步观察

检索键 dbc-AI 对应正式目录坐标「12·6·3 关于敏感性的进一步观察」;在“第12章 过程间分析”中用于把“关于敏感性的进一步观察”放进过程间上下文、指针关系与安全分析的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

使用BDD实现Datalog

检索键 dbc-AJ 对应正式目录坐标「12·7 使用BDD实现Datalog」;在“第12章 过程间分析”中用于求解调用、上下文、指向与污点关系并声明精度/成本边界,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

二叉决策图

检索键 dbc-AK 对应正式目录坐标「12·7·1 二叉决策图」;在“第12章 过程间分析”中用于把“二叉决策图”放进过程间上下文、指针关系与安全分析的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

BDD上的变换

检索键 dbc-AL 对应正式目录坐标「12·7·2 BDD上的变换」;在“第12章 过程间分析”中用于求解调用、上下文、指向与污点关系并声明精度/成本边界,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

使用BDD表示关系

检索键 dbc-AM 对应正式目录坐标「12·7·3 使用BDD表示关系」;在“第12章 过程间分析”中用于求解调用、上下文、指向与污点关系并声明精度/成本边界,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

将关系运算实现为BDD运算

检索键 dbc-AN 对应正式目录坐标「12·7·4 将关系运算实现为BDD运算」;在“第12章 过程间分析”中用于求解调用、上下文、指向与污点关系并声明精度/成本边界,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

使用BDD进行指向分析

检索键 dbc-AO 对应正式目录坐标「12·7·5 使用BDD进行指向分析」;在“第12章 过程间分析”中用于求解调用、上下文、指向与污点关系并声明精度/成本边界,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

讨论

评论区加载中…