程序分析与测试工具:从重叠数据结构到 C++ 符号执行
1. 重叠数据结构的程序分析
在程序分析领域,对于重叠数据结构的分析是一项重要任务。研究人员实现了基于 RHS 算法的过程间分析版本,并将其应用于验证两类程序的内存安全性。
1.1 实验程序集
实验使用的基准程序集包含以下几种类型的程序:
- list - dio :是 deadline IO 调度器的抽象版本,使用两个双向链表而非列表和树。sim 版本跳过了旧分析无法验证的请求移动例程。
- many - keys :具有按不同键排序的双向链表的重叠数据结构,链表数量在文件名中注明。
- many - lists :使用不同字段实现的多个双向链表,这些链表不共享节点,分析可分别处理每个链表。
- cache :有一个双向链表和指向最近访问的列表单元格的指针,可分别分析列表和指针。
- block/deadline - iosched.c :具有双向链表和红黑树的重叠数据结构来维护请求列表,原始源代码进行了修改以适应分析。
1.2 实验结果
实验结果表明,当前实现比 2008 年的旧分析性能更好,尤其是在程序变得更大或更复杂时,性能提升更为显著。部分程序旧分析根本无法处理。具体实验数据如下表所示:
| 文件名 | 代码行数 | 旧分析时间 (秒) | 新分析时间 (秒) | 加速比 | 插入的 transi_j(e) 数量 |