基于堆的程序符号执行增强技术解析
1. 符号执行规则基础
在符号执行过程中,有两个重要的规则:
- [S−NEW]规则 :用于分配新对象。具体操作步骤如下:
1. 生成一个新的符号地址 l′ 。
2. 更新栈,将变量 v 映射到这个新地址。
3. 通过将当前路径条件与新的指向谓词 l′→c(v1, ..., vn) 相结合,为 l′ 创建新的符号堆。
4. 使用程序计数器加载下一条语句。这里假设内存分配中使用的所有变量 v1, ..., vn 是不同的,并且每个变量 vi 最多用于创建一个新对象。
- [S−FREE]规则 :用于符号化地释放堆。为了在测试输入生成时捕获已释放的堆,会将相应的指向谓词存储在一个“垃圾”公式中。在执行结束时,这些谓词会被插入到当前路径条件中,然后用于生成测试输入。
2. 延迟测试输入生成
基于前面描述的符号执行引擎,这里介绍一种测试输入生成方法。输入是特定语言的程序 prog 和以分离逻辑公式形式存在的前置条件 Δpre ,输出是一组完全初始化的测试输入,这些输入满足前置条件并通常能实现较高的测试覆盖率。该方法基于延迟初始化,与以往基于延迟初始化的方法的主要区别在于,它以上下文敏感的方式生成引用变量和字段的值。
符号执行引擎从配置 ⟨Σ, Δp
超级会员免费看
订阅专栏 解锁全文
758

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



