论文部分内容阅读
软件逆向工程从可运行的程序系统出发,生成对应的源程序、系统结构以及相关设计原理和算法思想的文档等。它具有重大现实意义和经济价值,不但可以避免重复劳动,提高软件生产的效率和质量,而且可以将大量的遗产系统转化为易演化系统,从而充分有效地利用这些有用资产。虽然近年对软件逆向工程的研究已有不少,但是它仍然属于一个未充分发展的领域,并未形成统一的标准、方法和过程,因此很有必要进行深入研究。 本文以航空基金项目和陕西省自然科学基金项目为背景,结合272高空无线电高度表项目,在参阅了国内外的大量文献的基础上,按照申报航空基金的批准意见,围绕着“从源程序出发,生成可用于再工程的有关系统结构、设计原理和算法思想的文档”这个重点,对软件逆向工程的理论和方法进行了较为深入的研究,主要内容和技术创新包括: 1.提出应该构建面向对象的软件逆向工程数据库以支持软件逆向工程的特殊要求,并加以设计实现。 面向对象的数据库比关系型数据库更能够适应由软件逆向工程数据其自身的特点所产生的对软件逆向工程数据库的特殊要求,而且面向对象的软件逆向工程数据库能够对软件逆向工程的规范活动提供有效的支持。因此构建面向对象的软件逆向工程数据库是理想的选择。 本文中对面向对象的软件逆向工程数据库所作的设计工作包括:构造了用于表示软件逆向工程数据的各种类,并且描述了这些类之间的关系;构建了基于C/S结构和基于Intranet结构的两种面向对象的软件逆向工程数据库的总体结构;构建了面向对象的软件逆向工程数据库的管理系统框架,包括对集体开发的管理、对类库的管理以及使用OQL语言对数据库进行查询的管理等;构建了软件逆向工程数据库的备份机制,包括建立日志和使用快照及触发器建立数据副本。这样一套系统化的实现方案可以对建立、管理和使用软件逆向工程数据库进行全面的指导。 2.提出将同步细化策略作为软件逆向工程的程序理解策略,这一点是基于作者的实际工作经验而提出的。同步细化策略基于对设计决策的探测,它比自顶向下策略和自底向上策略g绷更好地克B脐剔宇理解中的困难,同时它所产生的再工程的设计也更she应软件逆向工程的需要。 3,提出在目前的技术条件下,应该开发软件逆向工程的辅助工具,并且给出了开发的原则:尽量直接利用现有的各种工具软件作为软件逆向工程的辅助工具,或者选择在其基础之上只需作少量开发的软件来开发软件逆向工程的辅助工具。提出这样的原则是因为在目前的技术条件下尚无法开发自动化的软件逆向工程工具,而很多现有软件可以对软件逆向工程的不同阶段提供辅助支持作用,从头开 以软件既费时又费力,而且违背软件逆向工程加速软件生产的初衷。 4.提出了一种通过反汇编和汇编改写再生汇编源程序的方法。这种方法本质上是一种针对机器码和中间代码的程序理解方法,通过它可以得到逆向生成的汇编源程序。 5.针对具体问题,完成了一个软件逆向工程的实例和两个再工程的实例。本文中关于软件逆向工程技术的一些观点正是在这些实例的基础上提出的。 本文从理论、方法和应用三方面对软件逆向工程中的若干问题进行了研究,内容包括:程序理解的策略与方法、设计诀策的解析、数据的组织、信息的存储、工具的开发等,力求能够为软件逆向工程进行多方面的支持。