提高渐进验证器的表达能力-计算机科学-静态验证-符号执行-计算机程序.pdf

提高渐进验证器的表达能力-计算机科学-静态验证-符号执行-计算机程序.pdf

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

提高渐进验证器的表达能力

PRIYAMGUPTA,PurdueUniversity,UnitedStates

静态验证为代码提供了强大的正确性保证;然而,完全指定程序以进行静态验证对于用户来说是一个

复杂且繁琐的过程。渐进式验证的引入是为了通过支持部分指定程序的验证来简化这一过程。目前唯

一正在工作的渐进式验证器GradualC0成功地验证了操作堆的程序,但在其规范语言中缺乏表达力。

本文描述了对GradualC0的一种扩展的设计和实现,该扩展支持展开表达式,这使得可以更直观地指

定递归的堆数据结构。

AdditionalKeyWordsandPhrases:逐步验证,符号执行,隐式动态帧,Viper

1介绍

本逐步验证[2,10]是一种结合编译时和运行时验证技术的方法,允许程序的增量规格说

译明和验证。为静态验证工具编写完整的规格说明是一个要么全做要么不做的复杂过程;

中渐进式验证通过允许用户验证具有缺失或不完整规格的程序来减轻编写完整系统规格

1的工作负担。它允许公式既可以是精确的(完整的),也可以是非精确的。可以假设用?

v

3标记的非矛盾加强的非精确公式(例如x.f==2)为静态,并添加运行时检查以确

3保正确性。

5

3逐步C0[3]是一个实用且高效的逐步验证器,建立在Viper[4]静态验证器之上。逐

1.步C0的后端(称为逐步Viper)扩展了Viper的符号执行基础的验证器以支持不精确

7

0的公式。利用Viper的基础架构简化了为不同的前端语言实现逐步验证器的过程。逐步

5C0的前端选择针对的是C0编程语言[1],这是一种为了教育设计的安全子集。逐步C0

2

:会提醒用户(通过静态和动态错误)他们的规格与代码之间的真正不一致,并抑制因缺

v

i少规格而引起的静态错误。逐步C0和Viper基于隐式动态帧(IDF)[8],这是分离逻辑

x

r[6]的一个变体,用于验证操作堆的程序。它们还支持递归抽象谓词[5,8],与IDF一起

a

允许用户验证包含递归堆数据结构的程序。谓词是对任何可能包含如堆权限和/或表达

式信息的断言的抽象。一个可访问性谓词(来自IDF),表示为acc(x.f),代表了访问

对象x的字段f的权限。

GradualC0当前的一个限制是其规范语言不支持Viper的展开p()在b中构造

[4](此后称为展开表达式)。这迫使用户设计复杂的方式来指定递归堆数据结构(参见

列表1和2中的链表示例)。也可能需要非传统的实现方式(例如,在AVL树的每个节

点中存储子树的高度以指定平衡属性)。请注意,展开表达式没有副作用,因此也广泛

用于纯函数中计算递归堆数据结构(纯函数将在未来对此工作的扩展中得到支持)。一

个展开表达式暂时将谓词主体暴露给框架(证明所有权)用于表达式中使用的堆位置。

谓词定义被当作等递归地[9]处理,因此需要显式展开以访问其主体中的断言。谓词可

以递归定义(如排序列表在1和2中),因此对于验证无界递归堆数据结构很有用。

Author’sContactInformation:PriyamGupta,PurdueUniversity,UnitedStates,gupta751@.

111:2PriyamGupta

Listing1.Listsortednesscurrentlyspecified.Listing2.Listsortednessspecifiedwithunfolding.

1structNode{intdata;structNode*next;};1structNode{intdata;structNode*next;};

2/*@2/*@

3predicatesortedList(structNode*this,*)intprev)3predicatesortedList(structNode*this)=

文档评论(0)

zikele + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档