逆代码生成方法和系统的制作方法

文档序号:8361217阅读:380来源:国知局
逆代码生成方法和系统的制作方法
【技术领域】
[0001] 本发明属于计算机信息处理领域,具体涉及到逆代码的自动生成技术。
【背景技术】
[0002] 对于一个代码段P,执行该段代码使得系统状态由Sl变换为S2,若此时存在另一 个代码段F1,执行F1使系统状态由S2恢复为S1,且P4的运行步骤好像是P运行步骤在 时间轴上的回溯,则称F1为P的逆代码或逆程序,即顺序执行P和P相当于一次空操作。 在实际应用中,很多代码均与其逆代码成对出现,比如进制间的互转换程序、加密和解密程 序、压缩和解压缩程序等,另外有些代码在执行过程中当遇到特定情况时可能需要将系统 状态恢复到之前某一时刻,比如数据库事务的回滚等,虽然实际上并未采用逆程序技术实 现,但效果上等同于运行逆程序。
[0003] 逆代码生成模块是一种根据给定的源代码自动生成其对应逆代码的软件,其工作 原理是:基于对源代码的分析和理解,通过递归方法逐步转换源代码中的各种语法结构和 语法成分,从而得到对应的逆代码,另外为在源代码运行过程记录被丢弃的部分信息(如 局部变量等),在这些信息的辅助下运行逆代码可撤销源代码对系统状态的更新。
[0004] 目前,在软件开发领域遇到如加密和解密等成对出现的互逆程序时,无论是前者 还是后者都是通过手工编码实现,没有充分利用互逆程序间逻辑上的关联,缺乏根据源代 码自动生成逆代码的技术,增加了很多额外的机械工作量。
[0005] 另外,在容错计算以及数据管理系统等应用场合,当系统运行遇到异常情况时,一 般根据之前记录的历史信息将系统状态恢复到先前的某一正常状态。对于大规模并发式应 用而言,记录历史信息的频率和规模都比较大,往往需要频繁访问外存,直接导致系统整体 性能下降。在这种情况下,自动生成正常点与异常点间代码段的逆代码,然后通过运行逆代 码的运行恢复之前系统状态,可以避免大规模的系统历史信息的备份,提高系统运行效率。

【发明内容】

[0006] 为解决上述技术问题,本发明提供了一种逆代码生成方法,接收规范的源程序,随 后将源程序通过逆代码生成模块得到无信息丢失的源代码和逆程序;
[0007] 将生成的无信息丢失的源代码和逆程序存储到缓冲模块中;
[0008] 最后将无信息丢失的源程序中不可恢复的信息保存在不可恢复信息栈中,在逆程 序运用中利用不可恢复信息栈中的不可恢复信息进行系统的状态恢复。
[0009] 本发明还提供一种逆代码生成系统,包括:
[0010] 接收模块,用来接收规范的源程序,并把源程序发送到逆代码生成模块;
[0011] 逆代码生成模块,用来把接收到的规范的源程序按照不同的格式进行处理,得到 无信息丢失的源代码和逆代码,并把源代码和逆代码发送到缓冲模块中进行存储;
[0012] 语言处理模块,用来从缓冲模块中提取逆代码,并利用逆代码进行系统状态恢复 处理,另外,语言处理模块还将无信息丢失的源代码中不可恢复信息发送到不可恢复信息 栈中进行保存,并在逆代码进行系统状态恢复处理时,从不可恢复信息栈中读取不可恢复 信息,之后根据不可恢复信息通过逆代码进行系统状态恢复。
[0013] 本发明的技术效果在于:
[0014] 1、实现一种根据给定代码段递归应用相应规则自动生成可逆代码的方法。
[0015] 2、对赋值表达式进行标准化改造,得到标准形式的赋值语句,此类赋值语句未降 低表达能力,且在可逆转换的过程中不产生垃圾信息。
[0016] 3、对if以及switch等分支语句提出可逆化改造方法,并通过在源代码中以注释 方式给出提示信息尽可能地降低可逆转换过程中产生的垃圾信息。
[0017] 4、通过在不可恢复信息栈中记录循环次数或循环变量的终值,对while以及for 等循环语句实现可逆化改造。
【附图说明】
[0018] 附图1为逆代码生成步骤示意图;
[0019] 附图2为逆代码生成系统示意图;
[0020] 附图3为逆代码生成模块处理步骤示意图;
[0021] 附图4为逆代码生成模块组成示意图。
【具体实施方式】
[0022] 下面结合说明书附图和【具体实施方式】对本发明作进一步的描述。
[0023] 给定源程序经逆代码生成模块处理生成逆程序的过程具体为:
[0024] 如图1所示,整体处理过程为:接收规范的源程序,随后将源程序通过逆代码生成 模块得到无信息丢失的源代码和逆程序,将生成的无信息丢失的源代码和逆程序存储到缓 冲模块中,最后将无信息丢失的源程序中不可恢复的信息保存在不可恢复信息栈中,在逆 程序运用中利用不可恢复信息栈中的不可恢复信息进行系统的状态恢复。
[0025] 其中,逆代码生成时对源代码的处理主要分两步,如下图3所示,包括预处理和可 逆代码生成。
[0026] 其中预处理是正式进行可逆转换之前的准备工作,主要内容如下:
[0027] 1、将局部变量声明和初始化语句分离,所以初始化语句都以标准赋值表达式的形 式出现。
[0028] 2、将" ++ "或" 一 "运算符从表达式中分离,并将其转变为标准赋值语句。
[0029] 经过预处理步骤后,正式开始对源代码进行可逆转换,转换时以源代码中的函数 为单位,递归应用以下转换规则:
[0030] 1、复合语句块的可逆转换
[0031] 2、赋值表达式的可逆转换
[0032] 3、if语句的可逆转换
[0033] 4、Switch语句的可逆转换
[0034] 5、while循环语句的可逆转换
[0035] 6、for循环语句的可逆转换
[0036] 如图2所示,本发明还提供一种逆代码生成系统,包括:接收模块,用来接收规范 的源程序,并把源程序发送到逆代码生成模块;逆代码生成模块,用来把接收到的规范的源 程序按照不同的格式进行处理,得到无信息丢失的源代码和逆代码,并把源代码和逆代码 发送到缓冲模块中进行存储;语言处理模块,用来从缓冲模块中提取逆代码,并利用逆代码 进行系统状态恢复处理,另外,语言处理模块还将无信息丢失的源代码中不可恢复信息发 送到不可恢复信息栈中进行保存,并在逆代码进行系统状态恢复处理时,从不可恢复信息 栈中读取不可恢复信息,之后根据不可恢复信息通过逆代码进行系统状态恢复。
[0037] 逆代码生成模块对源代码的处理主要有其中的两个模块完成的,如下图4所示, 包括预处理模块和可逆代码生成模块。
[0038] 其中预处理模块进行可逆转换之前的准备工作,主要处理的内容如下:
[0039] 1、将局部变量声明和初始化语句分离,所以初始化
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1