26、基于堆的程序符号执行增强技术解析

基于堆的程序符号执行增强技术解析

1. 符号执行规则基础

在符号执行过程中,有两个重要的规则:
- [S−NEW]规则 :用于分配新对象。具体操作步骤如下:
1. 生成一个新的符号地址 l′
2. 更新栈,将变量 v 映射到这个新地址。
3. 通过将当前路径条件与新的指向谓词 l′→c(v1, ..., vn) 相结合,为 l′ 创建新的符号堆。
4. 使用程序计数器加载下一条语句。这里假设内存分配中使用的所有变量 v1, ..., vn 是不同的,并且每个变量 vi 最多用于创建一个新对象。
- [S−FREE]规则 :用于符号化地释放堆。为了在测试输入生成时捕获已释放的堆,会将相应的指向谓词存储在一个“垃圾”公式中。在执行结束时,这些谓词会被插入到当前路径条件中,然后用于生成测试输入。

2. 延迟测试输入生成

基于前面描述的符号执行引擎,这里介绍一种测试输入生成方法。输入是特定语言的程序 prog 和以分离逻辑公式形式存在的前置条件 Δpre ,输出是一组完全初始化的测试输入,这些输入满足前置条件并通常能实现较高的测试覆盖率。该方法基于延迟初始化,与以往基于延迟初始化的方法的主要区别在于,它以上下文敏感的方式生成引用变量和字段的值。

符号执行引擎从配置 ⟨Σ, Δp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值