逆代码生成方法和系统技术方案

技术编号:11555515 阅读:88 留言:0更新日期:2015-06-04 04:18
本发明专利技术涉及一种逆代码生成方法和系统,处理方法具体为,接收规范的源程序,随后将源程序通过逆代码生成模块得到无信息丢失的源代码和逆程序,在逆程序运用中利用不可恢复信息栈中的不可恢复信息进行系统的状态恢复。本发明专利技术相对于现有技术而言,可大幅降低程序员的手工编码工作量,另外在容错技术、数据库管理系统等应用场合可用于异常情况下恢复系统状态,该技术相较其它通过备份大量历史信息以恢复系统状态的方法而言,其需备份信息极少,从而降低和外存交互数据的频率,进而提高系统整体性能。

【技术实现步骤摘要】
逆代码生成方法和系统
本专利技术属于计算机信息处理领域,具体涉及到逆代码的自动生成技术。
技术介绍
对于一个代码段P,执行该段代码使得系统状态由S1变换为S2,若此时存在另一个代码段P-1,执行P-1使系统状态由S2恢复为S1,且P-1的运行步骤好像是P运行步骤在时间轴上的回溯,则称P-1为P的逆代码或逆程序,即顺序执行P和P-1相当于一次空操作。在实际应用中,很多代码均与其逆代码成对出现,比如进制间的互转换程序、加密和解密程序、压缩和解压缩程序等,另外有些代码在执行过程中当遇到特定情况时可能需要将系统状态恢复到之前某一时刻,比如数据库事务的回滚等,虽然实际上并未采用逆程序技术实现,但效果上等同于运行逆程序。逆代码生成模块是一种根据给定的源代码自动生成其对应逆代码的软件,其工作原理是:基于对源代码的分析和理解,通过递归方法逐步转换源代码中的各种语法结构和语法成分,从而得到对应的逆代码,另外为在源代码运行过程记录被丢弃的部分信息(如局部变量等),在这些信息的辅助下运行逆代码可撤销源代码对系统状态的更新。目前,在软件开发领域遇到如加密和解密等成对出现的互逆程序时,无论是前者还是后者都是通过手工编码实现,没有充分利用互逆程序间逻辑上的关联,缺乏根据源代码自动生成逆代码的技术,增加了很多额外的机械工作量。另外,在容错计算以及数据管理系统等应用场合,当系统运行遇到异常情况时,一般根据之前记录的历史信息将系统状态恢复到先前的某一正常状态。对于大规模并发式应用而言,记录历史信息的频率和规模都比较大,往往需要频繁访问外存,直接导致系统整体性能下降。在这种情况下,自动生成正常点与异常点间代码段的逆代码,然后通过运行逆代码的运行恢复之前系统状态,可以避免大规模的系统历史信息的备份,提高系统运行效率。
技术实现思路
为解决上述技术问题,本专利技术提供了一种逆代码生成方法,接收规范的源程序,随后将源程序通过逆代码生成模块得到无信息丢失的源代码和逆程序;将生成的无信息丢失的源代码和逆程序存储到缓冲模块中;最后将无信息丢失的源程序中不可恢复的信息保存在不可恢复信息栈中,在逆程序运用中利用不可恢复信息栈中的不可恢复信息进行系统的状态恢复。本专利技术还提供一种逆代码生成系统,包括:接收模块,用来接收规范的源程序,并把源程序发送到逆代码生成模块;逆代码生成模块,用来把接收到的规范的源程序按照不同的格式进行处理,得到无信息丢失的源代码和逆代码,并把源代码和逆代码发送到缓冲模块中进行存储;语言处理模块,用来从缓冲模块中提取逆代码,并利用逆代码进行系统状态恢复处理,另外,语言处理模块还将无信息丢失的源代码中不可恢复信息发送到不可恢复信息栈中进行保存,并在逆代码进行系统状态恢复处理时,从不可恢复信息栈中读取不可恢复信息,之后根据不可恢复信息通过逆代码进行系统状态恢复。本专利技术的技术效果在于:1、实现一种根据给定代码段递归应用相应规则自动生成可逆代码的方法。2、对赋值表达式进行标准化改造,得到标准形式的赋值语句,此类赋值语句未降低表达能力,且在可逆转换的过程中不产生垃圾信息。3、对if以及switch等分支语句提出可逆化改造方法,并通过在源代码中以注释方式给出提示信息尽可能地降低可逆转换过程中产生的垃圾信息。4、通过在不可恢复信息栈中记录循环次数或循环变量的终值,对while以及for等循环语句实现可逆化改造。附图说明附图1为逆代码生成步骤示意图;附图2为逆代码生成系统示意图;附图3为逆代码生成模块处理步骤示意图;附图4为逆代码生成模块组成示意图。具体实施方式下面结合说明书附图和具体实施方式对本专利技术作进一步的描述。给定源程序经逆代码生成模块处理生成逆程序的过程具体为:如图1所示,整体处理过程为:接收规范的源程序,随后将源程序通过逆代码生成模块得到无信息丢失的源代码和逆程序,将生成的无信息丢失的源代码和逆程序存储到缓冲模块中,最后将无信息丢失的源程序中不可恢复的信息保存在不可恢复信息栈中,在逆程序运用中利用不可恢复信息栈中的不可恢复信息进行系统的状态恢复。其中,逆代码生成时对源代码的处理主要分两步,如下图3所示,包括预处理和可逆代码生成。其中预处理是正式进行可逆转换之前的准备工作,主要内容如下:1、将局部变量声明和初始化语句分离,所以初始化语句都以标准赋值表达式的形式出现。2、将“++”或“--”运算符从表达式中分离,并将其转变为标准赋值语句。经过预处理步骤后,正式开始对源代码进行可逆转换,转换时以源代码中的函数为单位,递归应用以下转换规则:1、复合语句块的可逆转换2、赋值表达式的可逆转换3、if语句的可逆转换4、Switch语句的可逆转换5、while循环语句的可逆转换6、for循环语句的可逆转换如图2所示,本专利技术还提供一种逆代码生成系统,包括:接收模块,用来接收规范的源程序,并把源程序发送到逆代码生成模块;逆代码生成模块,用来把接收到的规范的源程序按照不同的格式进行处理,得到无信息丢失的源代码和逆代码,并把源代码和逆代码发送到缓冲模块中进行存储;语言处理模块,用来从缓冲模块中提取逆代码,并利用逆代码进行系统状态恢复处理,另外,语言处理模块还将无信息丢失的源代码中不可恢复信息发送到不可恢复信息栈中进行保存,并在逆代码进行系统状态恢复处理时,从不可恢复信息栈中读取不可恢复信息,之后根据不可恢复信息通过逆代码进行系统状态恢复。逆代码生成模块对源代码的处理主要有其中的两个模块完成的,如下图4所示,包括预处理模块和可逆代码生成模块。其中预处理模块进行可逆转换之前的准备工作,主要处理的内容如下:1、将局部变量声明和初始化语句分离,所以初始化语句都以标准赋值表达式的形式出现。2、将“++”或“--”运算符从表达式中分离,并将其转变为标准赋值语句。经过预处理模块完成处理后,可逆转换模块正式开始对源代码进行可逆转换,转换时以源代码中的函数为单位,递归应用以下转换规则:1、复合语句块的可逆转换2、赋值表达式的可逆转换3、if语句的可逆转换4、Switch语句的可逆转换5、while循环语句的可逆转换6、for循环语句的可逆转换对于上述各个步骤和处理的对象,有如下具体解释:为重点说明各个步骤以及各种模块的工作原理,选定Java程序中的各个参数和信息作为处理对象,但舍弃其中面向对象的语法成分。由于Java语法中面向过程的语法成分和C、C++等常用语言几乎相同,所以本设计方案同样适用于Java外的其它语言。所谓“规范的源程序”主要是指在编程时赋值表达式在形式上需要遵循一定的规范,具体内容将放到赋值表达式转换的部分详细说明,另外还指在编程过程中需要严格遵守结构化程序设计的规范,比如单入口和单出口,再比如严禁随意使用goto等跳转指令(虽然Java语言不支持goto语句,但C和C++语言均是支持的),这些都是现代化编程须遵守的一些规范,并不会降低语言的表达能力,但如果不加这些约束,会增加可逆转换的难度并降低转换效率。接收模块接收上述描述的规范的源程序,并把这些源程序发送到逆代码生成模块,该模块根据Java语言中不同的格式数据进行处理,随后得到两个输出文件,分别是“无信息丢失的源程序”以及与其对应的逆程序,逆代码生成模块还将上述处理结果的两个文件发送到缓冲模块中进行存储,准备后本文档来自技高网
...
逆代码生成方法和系统

【技术保护点】
一种逆代码生成方法,其特征在于,接收规范的源程序,随后将源程序通过逆代码生成模块得到无信息丢失的源代码和逆程序;将生成的无信息丢失的源代码和逆程序存储到缓冲模块中;最后将无信息丢失的源程序中不可恢复的信息保存在不可恢复信息栈中,在逆程序运用中利用不可恢复信息栈中的不可恢复信息进行系统的状态恢复。

【技术特征摘要】
1.一种逆代码生成方法,其特征在于,接收规范的源程序,随后将规范的源程序通过逆代码生成模块得到无信息丢失的源程序和逆程序;将生成的无信息丢失的源程序和逆程序存储到缓冲模块中;最后将无信息丢失的源程序中不可恢复的信息保存在不可恢复信息栈中,在逆程序运用中利用不可恢复信息栈中的不可恢复信息进行系统的状态恢复;逆代码生成时对规范的源程序的处理主要分两步,包括预处理和可逆代码生成;预处理具体为,将局部变量声明和初始化语句分离,之后将“++”或“--”运算符从表达式中分离,并将其转变为标准赋值语句;可逆转换处理具体为,经过预处理步骤后,正式开始对规范的源程序进行可逆转换,转换时以规范的源程序中的函数为单位,递归应用以下转换规则:复合语句块的可逆转换、赋值表达式的可逆转换、if语句的可逆转换、Switch语句的可逆转换、while循环语句的可逆转换、for循环语句的可逆转换。2.一种逆代码生成系统,包括:接收模块,用来接收规范的源程序,并把规范的源程序发送到逆代码生成模块;逆代码生成模块,用来把接收到的规范...

【专利技术属性】
技术研发人员:朱鹏程卫丽华管致锦程学云张志祥
申请(专利权)人:南通大学杏林学院
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1