[发明专利]软件函数形式语义及形式化证明脚本自动生成方法有效
申请号: | 202110114974.2 | 申请日: | 2021-01-27 |
公开(公告)号: | CN112817599B | 公开(公告)日: | 2023-06-23 |
发明(设计)人: | 黄皓 | 申请(专利权)人: | 南京大学 |
主分类号: | G06F8/41 | 分类号: | G06F8/41;G06F8/51 |
代理公司: | 南京钟山专利代理有限公司 32252 | 代理人: | 陈月菊 |
地址: | 210093 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 软件 函数 形式 语义 形式化 证明 脚本 自动 生成 方法 | ||
1.一种软件函数形式语义及形式化证明脚本自动生成方法,其特征在于,所述自动生成方法包括以下步骤:
S1,编译软件函数的源代码生成汇编代码,将汇编代码分解成若干条没有分支结构和循环结构的执行路径,这些执行路径的语义的综合就是软件函数的语义;
S2,构建执行平台的指令系统中所有汇编指令的形式语义函数库,顺序分析处理每条执行路径上的所有汇编指令,依次建立由从执行路径第一条执行指令到当前执行指令的路径前段构成的子路径的语义函数;
其中,在每个执行路径对应的初始系统状态确定后,通过标准化系统新状态的构建过程,对汇编指令执行后的新状态进行自动构建,将指令执行后的新系统状态的每个状态分量均表示为初始系统状态的状态分量的表达式,再对系统新状态的表达式树进行化简处理;
S3,在分析处理当前执行指令时,记录在构建被改变状态分量值的表达式树用到的指令语义函数和子路径语义函数,以及表达式化简中用到的化简规则和子路径语义证明定理,利用这些元素自动生成指令执行后新状态的形式语义和相应的形式化证明脚本;
所述对汇编指令执行后的新状态进行自动构建的过程包括以下步骤:
S21,针对指令系统所有的指令建立指令的形式语义,它的形式是状态中目标操作数和指令指针寄存器等值的分量改变,其余分量不变;被改变的状态分量值的表达式由原状态分量构成的表达式树表示,其中原状态分量在表示式树中作为单一节点出现,与其具体的数值无关,与指令出现的位置无关;
S22,将步骤S21中被改变的状态分量值表达式中原状态分量单一节点替换成该原状态分量值表达式,使经过指令执行后的新状态的每个状态分量都采用初始状态的状态分量表示;以子孙节点优先替换为约束进行替换;
所述对系统新状态的表达式树进行化简处理的过程包括以下步骤:
对表达式子树进行数值计算以使其化简为单一的数值节点,使表达式化简成内存字读取和选择字节读取或选择字节改写一次操作的简单表达式。
2.根据权利要求1所述的软件函数形式语义及形式化证明脚本自动生成方法,其特征在于,步骤S1中,所述编译软件函数的源代码生成汇编代码,将汇编代码分解成若干条没有分支结构和循环结构的执行路径的过程包括以下步骤:
S11,将输入的软件函数通过编译生成与该软件函数代码块对应的汇编指令序列;
S12,针对步骤S11生成的汇编指令序列,识别出所有独立的或者嵌套的循环结构;
S13,针对步骤S12得到的去除循环结构的汇编指令序列,识别出所有独立的分支结构或者嵌套的分支结构,生成若干条没有分支结构和循环结构的汇编指令执行路径。
3.根据权利要求1所述的软件函数形式语义及形式化证明脚本自动生成方法,其特征在于,所述汇编指令执行后系统新状态的系统状态表示方法和内存访问表示方法为:
将系统状态划分成寄存器、栈、非栈内存的状态:寄存器组,在状态中表示成一个机器字类型的整数数组;栈空间,在状态中表示成栈空间字对齐地址到机器字型的整数类型的映射;非栈内存定义成机器字对齐的内存地址到机器字型的整数类型的映射;所有的内存访问指令都统一地表示成字对齐地址的内存访问和字节类型整数的列表操作;
用前缀表达式存储系统状态分量的值,简化利用当前状态分量值的表达式自动构建汇编指令的目标操作数新值的表达式的方法,简化目标操作数新值的表达式的化简方法。
4.根据权利要求1所述的软件函数形式语义及形式化证明脚本自动生成方法,其特征在于,步骤S21中,所述被改变的状态分量值的表达式由原状态分量构成的表达式树表示的过程包括以下步骤:
S211,设执行路径为i1,i2,…,in-1,in,初始状态为S0,操作数的格式是:v(rb,ir,scl)或r或c,其中v是直接寻址地址,rb是基址寄存器,ir是索引寄存器,scl是索引对象长度;
S212,设当前执行的指令是ik,状态是Sk-1,ik执行时,两个操作数中的元素v、scl和c是地址常数或数值常数跟状态无关,rb、ir和r是Sk-1状态下的一个寄存器的值,分别表示成Sk-1(rb)、Sk-1(ir)和Sk-1(r);
S213,指令ik执行后,系统状态Sk-1中的目标操作数分量被改变,目标操作x表示为:
x=f(v0,Sk-1(rb0),Sk-1(ib0),r0,c0,v1,Sk-1(rb1),Sk-1(ib1),r1,c1)
其中下标0表示源操作数的元素,下标1表示目标操作数的元素,f(·)的值是由它的参数构成的表达式;
S214,用表达式树记录目标操作x,用状态Sk-1下的相应的表达式树替换目标操作x对应的表达式树中的相应的节点,使指令ik执行前的状态Sk-1的每个分量都是S0状态下的分量构成的表达式树。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110114974.2/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种视频分析方法及装置
- 下一篇:一种热点舆情研判系统