[发明专利]反编译过程中的寄存器传播方法、装置及反编译器有效
申请号: | 201010289523.4 | 申请日: | 2010-09-17 |
公开(公告)号: | CN101963898A | 公开(公告)日: | 2011-02-02 |
发明(设计)人: | 陈耿标;林毓双 | 申请(专利权)人: | 广州迪庆电子科技有限公司 |
主分类号: | G06F9/30 | 分类号: | G06F9/30 |
代理公司: | 广州华进联合专利商标代理有限公司 44224 | 代理人: | 黄晓庆;王茹 |
地址: | 510000 广东省广州市天*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 反编译 过程 中的 寄存器 传播 方法 装置 编译器 | ||
技术领域
本发明涉及反编译技术领域,特别涉及一种反编译过程中的寄存器传播方法、一种反编译过程中的寄存器传播装置以及一种反编译器。
背景技术
反编译器的反编译过程一般可分为7个阶段,包括句法分析阶段、语法分析阶段、中间代码生成阶段、控制流程图生成阶段、数据流分析阶段、控制流分析阶段和代码生成阶段。其中,数据流分析阶段是对由前端生成的中间代码进行分析,将这些中间代码转换成高级表达式。中间代码是一个汇编类型的表示法,它使用寄存器和条件码,这种类型的代码与高级语言代码相差甚远,需要被进一步转换成与高级语言代码相近的高级表达式,这个转换过程主要包括下面几个部分:无用指令的清除、条件码的清除、寄存器参数和函数返回值的确定、中间过渡寄存器和指令的清除、实际参数的确定以及在跨子程序调用之间传播数据类型。
寄存器传播是属于数据流分析过程的一部分,其清除中间过渡寄存器和指令,重建在编译过程中丢失的部分信息,并生成与高级语言相近的高级表达式。
在现有常规的寄存器传播方式中,是在数据流分析阶段就进行寄存器的传播,由于此时还没有进行控制流分析过程,还无法获得各基本块之间的关系,因而寄存器的传播只能局限在基本块内部进行,无法跨基本块进行,导致传播不够彻底,影响反编译结果的正确性和可读性。
发明内容
针对上述现有技术中存在的问题,本发明的目的在于提供一种反编译过程中的寄存器传播方法、一种反编译过程中的寄存器传播装置、以及一种反编译器,其可以实现跨基本块的寄存器传播,使得寄存器传播更为彻底,提高反编译结果的正确性和可读性。
为达到上述目的,本发明采用以下技术方案:
一种反编译过程中的寄存器传播方法,包括步骤:
构造函数内的所有的指令路径;
遍历各指令所在的各指令路径,根据各指令所在的所有的指令路径,分别计算出各指令的使用定义链,得到各指令的使用定义链集;
顺序扫描各指令,根据各指令的使用定义链、预设寄存器传播规则,确定各指令的寄存器传播方式,并根据确定的寄存器传播方式进行各指令的寄存器传播。
一种反编译过程中的寄存器传播装置,包括:
指令路径构造单元,用于构造函数内的所有的指令路径;
与所述指令路径构造单元相连接的使用定义链单元,用于遍历各指令所在的各指令路径,根据各指令所在的所有的指令路径,分别计算出各指令的使用定义链,得到各指令的使用定义链集;
与所述使用定义链单元相连接的传播单元,用于顺序扫描各指令,根据各指令的使用定义链、预设寄存器传播规则,确定各指令的寄存器传播方式,并根据确定的寄存器传播方式进行各指令的寄存器传播。
一种反编译器,该反编译器包括如上所述的寄存器传播装置。
根据本发明的方案,其通过构造函数内的所有的指令路径,并遍历各指令路径,根据指令所在的所有的指令路径,来计算出指令的各使用定义链,使得指令的使用定义链的生成依赖于指令所在的指令路径集,指令能否进行传播的依据建立在对指令所含的使用定义链的情况的分析之上,实现了寄存器的跨基本块传播,使得寄存器传播更为彻底,提高了反编译结果的正确性和可读性。
附图说明
图1是本发明的反编译过程中的寄存器传播方法实施例的流程示意图;
图2是汇编代码示例图;
图3是对图2中的汇编代码构造指令路径的示例图;
图4是指令的使用定义链的示例图;
图5是依据本发明方法进行跨基本块寄存器传播的示例图;
图6是本发明的反编译过程中的寄存器传播装置实施例的结构示意图。
具体实施方式
本发明的反编译过程中的寄存器传播方法及装置,可应用于各种语言类型的反编译过程,在下述各具体实施例的说明中,以应用于C反编译器中的C反编译过程进行说明。
如图1所示,是本发明的反编译过程中的寄存器传播方法实施例的流程示意图,其包括步骤:
步骤S101:构造函数内的所有的指令路径,在应用于C反编译器中的C反编译过程中时,这里的函数为C函数,进入步骤S102;
步骤S102:遍历各指令所在的各指令路径,根据各指令所在的所有的指令路径,分别计算出各指令的使用定义链(ud-chain,use-define chaine),得到各指令的使用定义链集,进入步骤S103;
步骤S103:顺序扫描各指令,根据各指令的使用定义链、预设寄存器传播规则,确定各指令的寄存器传播方式,并根据确定的寄存器传播方式进行各指令的寄存器传播。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于广州迪庆电子科技有限公司,未经广州迪庆电子科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201010289523.4/2.html,转载请声明来源钻瓜专利网。