高效点到集分析与哈希合并技术
1. 点到分析概述
点到分析是一种基础的静态分析方法,在内存错误检测、并发漏洞排查、类型状态验证、控制流完整性强制、符号执行以及代码嵌入等诸多领域都有广泛应用。其核心目标是静态估算指针在运行时可能指向的抽象对象集合。
在众多点到分析方法中,基于包含关系的分析最为常用。它将点到解析问题转化为集合约束求解问题,即每个程序语句会产生一个或多个集合约束,这些约束会被转化为两个点到集之间的并集操作,直至达到固定点。
然而,在分析实际程序时,尤其是进行高精度分析时,会出现大量重复的点到集和并集操作。例如,与流不敏感分析(为每个指针计算一个单一的点到集)不同,流敏感分析会在不同程序点计算和维护点到集,这就导致了大量重复点到集的出现。
以下是16个真实世界C/C++程序在Andersen分析和分阶段流敏感分析(SFS)下的重复点到集情况:
| 程序 | Andersen分析 | | | SFS分析 | | |
| — | — | — | — | — | — | — |
| | 指针数 | 指向前5个最常见点到集的指针数 | 比例 | 指针数 | 指向前5个最常见点到集的指针数 | 比例 |
| dhcpcd | 21572 | 13651 | 63.28% | 851784 | 839518 | 98.56% |
| nsd | 38328 | 28022 | 73.11% | 2423193 | 2399449 | 99.02% |
| tmux | 49080 | 36999 | 75.39% | 4331232 | 2483020 | 57.33% |
| gawk |
超级会员免费看
订阅专栏 解锁全文
8万+

被折叠的 条评论
为什么被折叠?



