一种汇编程序的形式验证框架的制作方法

文档序号:9865293阅读:155来源:国知局
一种汇编程序的形式验证框架的制作方法
【技术领域】
[0001]一种汇编程序的形式验证框架主要涉及计算机语言方面领域。
【背景技术】
[0002]随着国家和社会对软件的依赖程度日益增长,关键软件的高可信性质显得越来越重要,其中安全性(包括可靠安全性和保密安全性)是关注的重点。可靠安全性是指软件运行时不引起危险、灾难的能力,而保密安全性是指软件系统对数据和信息提供保密性、完整性、可用性、真实性保障的能力。本文所,讲的安全性主要是指可靠安全性.但是两者也是紧密相连的,提高可靠安全性有助于保证保密安全性。
[0003]提高软件安全性的目标是所有的程序错误在程序运行前被发现或者在程序运行时被温和地捕获,以保证程序不会导致不可预测的系统行为。而软件安全性研究主要是探索如何建立一个管理安全性的健全的科学和技术基础,其中软件满足安全策略的程序性质证明方法是研究的热点之一。
[0004]分析当前研究现状,程序性质证明采用类型方法和逻辑方法相结合方式可以兼得两种方法的长处.而ATS的类型系统过于复杂,以致普通程序员难以掌握;CAP方式的验证需要程序员进行繁复的汇编程序手工证明,不适合用于大规模开发。
[0005]因此,我们选择采用一个简单的类型系统结合一个自动的逻辑推理系统的方法来证明程序满足安全策略.对那些有高安全要求的关键软件、程序设计及安全性证明可以在一种新的编程和编译框架下进行。
[0006]该框架包括断言与规范语言、合式公式、推理规则和可靠性定理.此外,本文还将介绍一个汇编语言指针逻辑系统,它保证通过验证的程序不存在悬空指针引用,或对动态分配存储的访问越界等.部分内容限于篇幅只做简要叙述。
[0007]

【发明内容】

通过国家专利检索没有发现关于此系统方面的申请资料。
[0008]该框架主要包括断言与规范语言、合式公式、推理规则和可靠性证明。在目标机器TM上对程序进行Hoare风格的推理,程序员首先要使用断言与规范语言对代码堆(程序)进行标注,然后使用合适的推理规则进行程序良形性(well-formedness)的定理证明。
[0009]I)断目与规范语目。断目语目直接使用兀逻辑。断目的类型是State —State一Prop,即断言是以两个状态为参数的谓词.它们分别是所在函数的初始状态和当前状态.使用函数初始状态便于表达函数返回值和参数初值之间的联系,也便于表达汇编程序的一些特定性质.例如在一个函数运行时,当前活动记录中保存的返回地址和上一个活动记录的基地址都没有被修改,其他活动记录的内容也没有被修改等.元逻辑中的Prop在此没有被进一步描述,这是为了便于定制不同的逻辑,使该验证框架能被用于不同场合。
[0010]函数规范中的P和q分别对应函数前后条件。指令块规范只需要前条件P,而省略了后条件,这是因为可以使用后继指令块的前条件来进行推理(一个指令块的后断言应该蕴涵它后继指令块的前断言)。
[0011]使用断言与规范语言对代码堆的每个指令块、函数进行标注,即定义代码堆规范环境寥和函数规范环境三。由于一个函数满足规范的证明和被调用函数的规范有关,三同时也包含被调函数的规范。
[0012]断青和规范的语法如下:
(CdHpSpecCntxt) Ψ:: ={f->l->a};
(FunSpecntxt) Σ:: ={f->b};
(Assert1n)p, q e State->State_>Prop;
(CmdSpec)a ; I =p;
(FunSpec)b:: = (p, q)。
[0013]2)合式公式.它本质上和Hoare逻辑的合式公式是一致的.断言加到代码块、函数和程序上,形成5个层次的合式公式:合式代码块、合式函数体、合式函数、合式代码堆和合式程序,下面使用这些合式公式来定义推理规则:
(Well-formed InstrBlock) Ψ(f); Σ -{a}I;
(Well-formed FuncBody) Ψ (f); Σ -C(f): Ψ(f);
(Well-formed Funct1n) Ψ(f); Σ -{(ρ, q)}C(f);
(Well-formed CodeHeap) Ψ; Σ -C: Σ ;
(Well-formed Program) Ψ; Σ |-{a}P。
[0014]3)推理规则。一个程序(C,S,(F,I)是合式的(规则PR0G),仅当存在规范环境Ψ和Σ,使得代码堆C是合式代码堆,a在当前状态S下为真,并且I是合式指令块。
[0015]规则FBLK是指若一个函数的每个指令块是合式的,则该函数所有指令块构成的函数体是合式的.规则FUNC是指若函数体是合式的,函数前断言蕴涵函数人口块的前断言,并且出口块以ret指令结尾,则该函数是合式的(函数出口点状态满足函数后断言的要求体现在ret指令规则的前提中).同样,规则CDHP是指若构成代码堆的每个函数是合式的,则代码堆是合式的。
[0016]合式指令块保证了在满足断言a的状态下执行指令块J是安全的.对于指令块C,f,在满足口的状态下执行C,若得到的状态能使断言a’为真,而且a’使得I为合式的,那么c,J是合式指令块(SEQ规则).SEQ规则的前提使用了操作语义函数Next,这表明合式指令块的定义依赖于操作语义而不像Hoare逻辑那样使用代换.一个直接跳转是合式的指令块(JMP规则),仅当当前断言a蕴含跳转目的指令块对应的断言a’.其他跳转和分支指令的规则类似JMP规则,不再一一列出。
[0017]因此,可以看出要证明一个指令块的良形性,需要应用相应的规则,并且给出正确的中间断言。
[0018]CALL和RET这两条规则反映了 Intel x86机器上函数调用和返回之间的约定.例如RET规则的前提要求在本函数的执行过程中,除了当前活动记录外栈的其他地方没有修改,并且当前活动记录中保存的上一个活动记录基地址和返回地址没有被修改。
[0019]4)可靠性定理.定义了推理规则之后,要证明这些静态推理规则对TM操作语义的可靠性,见定理1.它保证良形的程序可以在目标机器上一直安全执行。
[0020]定理1.可靠性(soundness).如果Ψ ; Σ卜{a}P,那么对任何自然数η存在程序?’,使得?|呼’.简单地说,Ψ;Σ |-{a}P是合式的,则P可以一直安全执行.TM操作语义使用小步归约语义,根据基于语法的方法(syntactic approach) [163证明该定理只需要先证明如下两个引理。
[0021]引理1.前进性(progress).如果Σ I _{a}P,那么存在P’,使得P卜〉P’。
[0022]引理2.保持性(preservat1n).如果Σ I _ {a} P并且存在P’,使得P |->P’,那么存在 a’,使得 Σ |-{a’}P’。
【主权项】
1.一种汇编程序的形式验证框架其特征主要包括断言与规范语言、合式公式、推理规则和可靠性证明。2.根据权利要求1中的断言与规范语言则是直接使用元逻辑,断言的类型是State—State — Prop,即断言是以两个状态为参数的谓词,它们分别是所在函数的初始状态和当前状态.使用函数初始状态便于表达函数返回值和参数初值之间的联系,也便于表达汇编程序的一些特定性质。3.根据权利要求1中合式公式则是断言加到代码块、函数和程序上,形成5个层次的合式公式:合式代码块、合式函数体、合式函数、合式代码堆和合式程序。4.根据权利要求1中推理规则和可靠性证明则是定义了推理规则之后,要证明这些静态推理规则对TM操作语义的可靠性,它保证良形的程序可以在目标机器上一直安全执行。
【专利摘要】一种汇编程序的形式验证框架基于Intelx86目标机器模型TM,支持Hoare风格的推理.通过出具证明编译器的一个原型,在该汇编程序验证框架上生成了有关单链表和二叉树的一些函数的携带证明的代码。
【IPC分类】G06F9/45
【公开号】CN105630568
【申请号】CN201410591523
【发明人】陈伟男
【申请人】镇江华扬信息科技有限公司
【公开日】2016年6月1日
【申请日】2014年10月30日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1