论文部分内容阅读
反编译一直以来是逆向工程的重要研究领域之一,它主要通过对机器代码进行逆向编译得到软件的源代码。在工业控制领域,如石油、化工、冶金、电力等对安全要求较高的行业,控制程序的可靠性至关重要。通过反编译得到控制程序的源码,可以有效验证可执行代码的正确性,是一种提高程序可靠性的通用手段。本文的核心就是对组态软件生成的控制程序进行反编译验证。文中选取了广泛用于过程控制领域的FBD语言为研究载体,分析了图形化控制语言的反编译机制,并设计了具有反编译验证功能的DeFBD系统。本文完成的主要工作如下:1)通过对FBD语言各组态元素的详细分析,设计了一种适合于反编译的平台无关的中间代码结构。该中间代码采用一种二叉树结构,以语法树的形式表示FBD程序单元。文中介绍了中间语言的语法元素,给出了语法树节点的具体数据结构,并分析了FBD各类元素的中间代码表示方法。2)将现有的针对C语言的反编译技术应用到FBD语言的反编译研究中,并对DeFBD反编译系统进行了具体设计。该系统以中间语言为分界线,分为前端和后端。文中首先介绍了前端需要完成的主要工作:对二进制代码进行语法分析、语义分析、数据流分析、控制流分析等处理,生成平台无关的中间代码。然后,从FBD语言编译时各种逻辑的翻译入手,探索反编译后端的实现方法。3)设计了FBD程序的自动比较算法,用于验证反编译的结果和FBD源程序的等价性。文中引入了“原子元素”的概念,将FBD程序中的复合元素分解为基本元素序列。基于FBD语言的逻辑执行顺序,设计了FBD元素执行顺序的排序算法。进而将FBD程序比较问题转换为FBD元素的比较问题,并给出了比较方法。本文所研究的FBD语言反编译系统是工业控制领域组态软件可靠性的重要保障,对其他图形化工业控制语言的反编译也有一定的借鉴作用。