反编译在航天工业中的应用*赵 蕾 吴 岩 王开铸(哈尔滨工业大学计算机系319信箱*哈尔滨*150001) 摘 要 本文论述了反编译作为一种程序验证的工具在航天工业中的重要地位和应用;介绍了反编译的背景知识;给出一个实用的反编译系统DCPL的设计模型和关键技术及其一个运行结果示例以说明反编译器的功能。 主题词 反编译 软件工具 程序验证 程序可靠性APPLICATION OF DECOMPILATION TO AEROSPACE INDUSTRYZhao Lei Wu Yan Wang Kaizhu(Department of Computer Science and Engineering BOX 319,Harbin Institute of Technology*Harbin*150001) Abstract In this paper,the significance and application of decompilation as a program verifying tool in Aerospace Industry is discussed;the background knowledge of decompilation is introduced;a model of a practical decompiler DCPL is presented as well its result to show its Key words Decompilation Software tool Program verification Program reliability1 引 言 航天工业是各国竞相发展的一项事业。航天器的各部分都离不开计算机的控制,各种控制软件、计算软件、分析软件等等在航天器的设计与应用中起着重要地位。 1996年6月4日阿里亚娜-5型火箭发射失事,使欧共体蒙受25亿美元以上的损失。经过专家调查,此次失事的主要原因是:箭载计算机系统使用的软件出了问题。此软件是从阿里亚娜-4型火箭的软件系统中移植过来的,由于5型火箭上增加了新机构,而4型火箭的软件不能对这些新机构发出的信号进行分析和处理,从而导致火箭控制失灵。由于阿里亚娜-5型火箭发射的失事,使软件可靠性和正确性问题再度摆到软件开发者面前〔1〕。反编译器作为一种有效的程序验证的工具使人们再度意识到它在航天工业中的重要性及实用性。本文介绍了反编译器的功能、产生背景和它在航天工业中的应用,并给出了我们正在研制的一个实用反编译系统DCPL的体系结构及关键技术,最后给出其一个简单的运行示例。2 反编译的背景知识介绍1 反编译的定义 反编译可以看成是编译的逆过程,即将以机器语言形式存在的目标代码翻译成与其功能等价的高级语言形式的代码的过程〔2〕。 确定型反编译的模型为一个映射,decompile:S—>T,其中S是源代码集(source),是机器指令集;T是目标代码集(target),是高级语句集。2 反编译的产生背景 反编译(Decompilation)一词第一次出现于1960年。六十年代,随着第三代计算机的产生,为了挽救大量的运行在即将报废的第二代计算机上的软年,同时也为加速开发第三代机器的软件,美国开始研制专门用途的反编译器作为软件移植的工具。3 反编译在航天技术中的应用 反编译发展至今,其应用领域主要体现在软件维护和软件安全性〔2〕两方面。用于软件维护时,主要是恢复丢失的源代码、将软件移植到新的硬件平台、重新结构化旧有软件等等。用于软件安全性时,主要是针对安全性要求极高(safty-critical)的软件,发现其中是否有病毒,或是否有隐藏的窃密程序(Trojan)。 西方各国早已将反编译技术用于航天事业和尖端工业,如:IBM为NASA的航天飞机研制的反编译器〔3〕;澳大利亚电子研究实验室研制的针对类Pascal语言的反编译器〔4〕;欧共体ESPRIT计划中的反编译研究,如英国的核工业部使用反编译技术验证大量的safty-critical软件,以提高软件的正确性〔5〕;我国从80年代初开始反编译的研究并且已逐步形成自己的产品〔6〕,但尚未见将反编译技术应用于航天技术的报导。 用于航天的软件系统通常不经过编译优化以避免不必要的软件错误,反编译此类软件的难度相对减小。可以通过将内存映象的反编译结果与原始输入(源程序)相比较来验证软件的正确性,如果二程序完全等价,则编译结果可靠(反编译可靠的前提下)。如下图示:图1 反编译验证程序正确性如果对于每一种输入,都有输出1=输出2=预测结果,则可说明编译是可靠的。同样也可通过比较原始程序和反编译结果在程序功能空间中的拓朴结构是否完全一样,来判定反编译是否做到了输出结果与原始程序功能等价,这通常要经过大量的测试。3 一个实用反编译系统DCPL的体系结构 DCPL是我们研制的一个反编译系统,其设计吸收了编译技术中的成熟理论。1 DCPL体系结构 下图给出了DCPL的模型。它以可执行文件作为输入,输出与其对应的C语言程序。图2 DCPL体系结构2 DCPL各模块的功能 (1)预处理器:是DCPL的基础,以可执行文件作为输入,将其部分反汇编,根据程序的启动代码,提取出相应的数据段和代码段,存储在中间文件中。 (2)库函数识别器:是对中间文件的一遍扫描。根据库函数特征表识别出文件中所有库函数和用户自定义函数的入口。采用顺序-索引-连接技术构造特征表。索引函数的形式为:index(len,n)=w1*len+w2*n;其中len和n分别为函数主体的长度和它所调用辅函数的次数。用一指针数组指向各个特征链的头结点,数组的下标值是索引函数作用于各个特征结点上的结果;同一个链上的各个结点的特征值经索引函数作用后其值相同;链表内部,各结点依照使用频率顺序存放。 (3)控制流分析器:根据反编译控制流文法,以语法制导的方法进行控制流的分析和归约,生成控制流模块的机内表示形式及其结构文件。采用约束属性文法描述控制流,如
008数学与软件科学学院 "040102课程与教学论01竞赛数学教学研究02中学数学教育" 本硕士点于2000年开始招生,现有中学数学教育、竞赛数学教育两个研究方向。导师队伍中现有教授3人。本专业注重现代数学思想和方法,中小学课程与教学研究、课件开发、授课能力的培养,也必修了泛函分析、基础代数、拓扑学等数学基础课程,选修有随机过程、时间序列分析、数学建模等课程。本专业毕业生主要在中小学任教、在教育科研部门任职和从事教育课件的开发研究工作等。 5 "①101思想政治理论②201英语一③311教育学专业基础综合" 教育部指定大纲 无 实变函数、近世代数、数值计算方法、程序设计基础(任选一门)。参考书目:①《实变函数与泛函分析基础》,程其襄等编;②《近世代数》,张禾瑞编;③《计算机数值方法》,施吉林等编;④ 《程序设计基础教程》,冯山编。 实变函数、泛函分析、复变函数、近世代数、常微分方程、数值计算方法、拓扑学 (复试科目以外任选二门)。参考书:①《实变函数与泛函分析基础》,程其襄等编;②《复变函数》,钟玉泉编;③《近世代数》,张禾瑞编;④《数值计算方法》,施吉林等编;⑤《拓扑学》,熊金城编;⑥《常微分方程教程》,丁同仁编。 "实变函数、泛函分析、复变函数、近世代数、常微分方程、数值计算方法、拓扑学 (复试科目以外任选二门)。参考书与同等学力加试参考书目一致。" 无 "028-84760177"008数学与软件科学学院 "045104学科教学(数学)(专业学位)" 所培养人才应具有扎实宽广的数学基础,了解本学科目前的进展与动向;深入掌握研究方向的专门知识,系统了解研究方向的重要课题与文献;具有初步进行科学研究的能力,能独立撰写较高水平的学术论文培养适应国家地方经济与社会发展需要,从事教育管理和教学科研以及继续学习的高层次数学教育专门人才。 5 "①101思想政治理论②204英语二③333教育综合④821高等代数" 教育硕士专业学位教指委指定大纲 同上 同上 同上 同上 无 "028-84760177"008数学与软件科学学院 "070101▲☆基础数学 01泛函分析02函数论03代数学04模糊数学05偏微分方程" 本硕士点于1986年开始招生,是四川省重点建设项目。本专业现有泛函分析、代数学、函数论、模糊数学、偏微分方程五个研究方向。现有教授10名(其中博士生导师8名,校特聘教授2名,四川省学术与技术带头人及后备人选4名),在偏微分方程、交换代数与泛函分析等研究领域在国内外有一定的影响,本专业注重研究生的数学基本理论和基本思想方面的培养,毕业生具有一定的独立科研能力,选修有竞赛数学、随机过程、时间序列分析、数学建模等课程。毕业生能从事各级各类学校、科研院所的教学和科研工作。 15 "①101思想政治理论②201英语一③621数学分析④821高等代数" 《数学分析》,华东师范大学数学系编,高等教育出版社。 《高等代数》,北京大学数学系几何与代数教研室前代数小组编,高等教育出版社。 实变函数、近世代数、数值计算方法、程序设计基础(任选一门)。参考书:①《实变函数与泛函分析基础》,程其襄等编;②《近世代数》,张禾瑞编;③《计算机数值方法》,施吉林等编;④《程序设计基础教程》,冯山编。 实变函数、泛函分析、复变函数、近世代数、常微分方程、数值计算方法、拓扑学(复试科目以外任选二门)。参考书:①《实变函数与泛函分析基础》,程其襄等编;②《复变函数》,钟玉泉编;③《近世代数》,张禾瑞编;④《数值计算方法》,施吉林等编;⑤《拓扑学》,熊金城编;⑥《常微分方程教程》,丁同仁编。 实变函数、泛函分析、复变函数、近世代数、常微分方程、数值计算方法、拓扑学 (复试科目以外任选二门)。参考书与同等学力加试参考书目一致。 无 "028-84760177"008数学与软件科学学院 "070102计算数学01算法设计与分析02数值分析" 本硕士点于2003年开始招生,现有算法设计与分析、数值分析两个研究方向,现有教授3人,在数值计算在数学物理和流体力学方程中的应用、群体智能和生物仿生算法、基因信息计算、量子图像处理等方面有较好的学术影响。本专业主要培养计算数学方面的高层次的专门人才,使学生能熟练地掌握实时系统、数据挖掘、教学软件开发等热门领域理论,具有一定的独立科研能力,选修有竞赛数学、随机过程、时间序列分析、数学建模等课程。毕业生能从事各类学校、科研院所及企事业单位的工作。 7 同上 同上 同上 同上 同上 同上 无 "028-84760177"008数学与软件科学学院 "070104应用数学01数学物理 02Hopf代数及其应用03最优化理论及其应用04不确定性数学理论05应用数论 " 本硕士点于2003年开始招生,现有不确定性的数学理论、数学物理、Hopf代数及其应用、最优化理论、应用数论等五个研究方向。现有教授7人(其中博士生导师3人),在数学物理、不确定性的数学理论、最优化理论及其应用等研究领域在国内外有一定的影响。本专业研究生除了学习数学基础理论,还非常注重数学的在其它学科中的应用,毕业生具有一定的独立科研能力,研究生选修有竞赛数学、随机过程、时间序列分析、数学建模等课程。毕业生能从事各级各类学校、科研院所的教学和科研工作,也能从事软件设计、工程设计等方面的工作。 5 同上 同上 同上 同上 同上 同上 无 "028-84760177"008数学与软件科学学院 "070105▲运筹学与控制论01最优控制02模糊系统与神经网络03变分不等式与数值解04随机运筹学" 本硕士点于1999年开始招生,是四川省重点学科。现有最优控制、变分不等式理论与数值计算、模糊系统与神经网络、随机运筹学等四个研究方向。现有教授6名,(其中博士生4名,四川省学术与技术带头人及后备人选2名),在最优控制、变分不等式理论与数值计算、随机运筹学等研究领域有较好的研究基础,结合社会发展和需求,本专业注重培养硕士研究生在运筹学与控制论的基本理论及其应用方面的能力,为研究生开设了竞赛数学、随机过程、时间序列分析、数学建模等选修课程。本专业毕业生具备金融数学、生物数学等交叉学科的理论和科研能力,能从事各类学校、科研院所及企事业单位工作。 6 同上 同上 同上 同上 同上 同上 无 "028-84760177"
008数学与软件科学学院 "040102课程与教学论01竞赛数学教学研究02中学数学教育" 本硕士点于2000年开始招生,现有中学数学教育、竞赛数学教育两个研究方向。导师队伍中现有教授3人。本专业注重现代数学思想和方法,中小学课程与教学研究、课件开发、授课能力的培养,也必修了泛函分析、基础代数、拓扑学等数学基础课程,选修有随机过程、时间序列分析、数学建模等课程。本专业毕业生主要在中小学任教、在教育科研部门任职和从事教育课件的开发研究工作等。 5 "①101思想政治理论②201英语一③311教育学专业基础综合" 教育部指定大纲 无 实变函数、近世代数、数值计算方法、程序设计基础(任选一门)。参考书目:①《实变函数与泛函分析基础》,程其襄等编;②《近世代数》,张禾瑞编;③《计算机数值方法》,施吉林等编;④ 《程序设计基础教程》,冯山编。 实变函数、泛函分析、复变函数、近世代数、常微分方程、数值计算方法、拓扑学 (复试科目以外任选二门)。参考书:①《实变函数与泛函分析基础》,程其襄等编;②《复变函数》,钟玉泉编;③《近世代数》,张禾瑞编;④《数值计算方法》,施吉林等编;⑤《拓扑学》,熊金城编;⑥《常微分方程教程》,丁同仁编。 "实变函数、泛函分析、复变函数、近世代数、常微分方程、数值计算方法、拓扑学 (复试科目以外任选二门)。参考书与同等学力加试参考书目一致。" 无 "028-84760177"008数学与软件科学学院 "045104学科教学(数学)(专业学位)" 所培养人才应具有扎实宽广的数学基础,了解本学科目前的进展与动向;深入掌握研究方向的专门知识,系统了解研究方向的重要课题与文献;具有初步进行科学研究的能力,能独立撰写较高水平的学术论文培养适应国家地方经济与社会发展需要,从事教育管理和教学科研以及继续学习的高层次数学教育专门人才。 5 "①101思想政治理论②204英语二③333教育综合④821高等代数" 教育硕士专业学位教指委指定大纲 同上 同上 同上 同上 无 "028-84760177"008数学与软件科学学院 "070101▲☆基础数学 01泛函分析02函数论03代数学04模糊数学05偏微分方程" 本硕士点于1986年开始招生,是四川省重点建设项目。本专业现有泛函分析、代数学、函数论、模糊数学、偏微分方程五个研究方向。现有教授10名(其中博士生导师8名,校特聘教授2名,四川省学术与技术带头人及后备人选4名),在偏微分方程、交换代数与泛函分析等研究领域在国内外有一定的影响,本专业注重研究生的数学基本理论和基本思想方面的培养,毕业生具有一定的独立科研能力,选修有竞赛数学、随机过程、时间序列分析、数学建模等课程。毕业生能从事各级各类学校、科研院所的教学和科研工作。 15 "①101思想政治理论②201英语一③621数学分析④821高等代数" 《数学分析》,华东师范大学数学系编,高等教育出版社。 《高等代数》,北京大学数学系几何与代数教研室前代数小组编,高等教育出版社。 实变函数、近世代数、数值计算方法、程序设计基础(任选一门)。参考书:①《实变函数与泛函分析基础》,程其襄等编;②《近世代数》,张禾瑞编;③《计算机数值方法》,施吉林等编;④《程序设计基础教程》,冯山编。 实变函数、泛函分析、复变函数、近世代数、常微分方程、数值计算方法、拓扑学(复试科目以外任选二门)。参考书:①《实变函数与泛函分析基础》,程其襄等编;②《复变函数》,钟玉泉编;③《近世代数》,张禾瑞编;④《数值计算方法》,施吉林等编;⑤《拓扑学》,熊金城编;⑥《常微分方程教程》,丁同仁编。 实变函数、泛函分析、复变函数、近世代数、常微分方程、数值计算方法、拓扑学 (复试科目以外任选二门)。参考书与同等学力加试参考书目一致。 无 "028-84760177"008数学与软件科学学院 "070102计算数学01算法设计与分析02数值分析" 本硕士点于2003年开始招生,现有算法设计与分析、数值分析两个研究方向,现有教授3人,在数值计算在数学物理和流体力学方程中的应用、群体智能和生物仿生算法、基因信息计算、量子图像处理等方面有较好的学术影响。本专业主要培养计算数学方面的高层次的专门人才,使学生能熟练地掌握实时系统、数据挖掘、教学软件开发等热门领域理论,具有一定的独立科研能力,选修有竞赛数学、随机过程、时间序列分析、数学建模等课程。毕业生能从事各类学校、科研院所及企事业单位的工作。 7 同上 同上 同上 同上 同上 同上 无 "028-84760177"008数学与软件科学学院 "070104应用数学01数学物理 02Hopf代数及其应用03最优化理论及其应用04不确定性数学理论05应用数论 " 本硕士点于2003年开始招生,现有不确定性的数学理论、数学物理、Hopf代数及其应用、最优化理论、应用数论等五个研究方向。现有教授7人(其中博士生导师3人),在数学物理、不确定性的数学理论、最优化理论及其应用等研究领域在国内外有一定的影响。本专业研究生除了学习数学基础理论,还非常注重数学的在其它学科中的应用,毕业生具有一定的独立科研能力,研究生选修有竞赛数学、随机过程、时间序列分析、数学建模等课程。毕业生能从事各级各类学校、科研院所的教学和科研工作,也能从事软件设计、工程设计等方面的工作。 5 同上 同上 同上 同上 同上 同上 无 "028-84760177"008数学与软件科学学院 "070105▲运筹学与控制论01最优控制02模糊系统与神经网络03变分不等式与数值解04随机运筹学" 本硕士点于1999年开始招生,是四川省重点学科。现有最优控制、变分不等式理论与数值计算、模糊系统与神经网络、随机运筹学等四个研究方向。现有教授6名,(其中博士生4名,四川省学术与技术带头人及后备人选2名),在最优控制、变分不等式理论与数值计算、随机运筹学等研究领域有较好的研究基础,结合社会发展和需求,本专业注重培养硕士研究生在运筹学与控制论的基本理论及其应用方面的能力,为研究生开设了竞赛数学、随机过程、时间序列分析、数学建模等选修课程。本专业毕业生具备金融数学、生物数学等交叉学科的理论和科研能力,能从事各类学校、科研院所及企事业单位工作。 6 同上 同上 同上 同上 同上 同上 无 "028-84760177"
B1B95 关键字指定Becke 的单参数混合泛函,在文献[480]中定义。程序还提供了其它类似的单参数混合泛函,由Adamo 和Barone 建立[480,485]。在一个变体B1LYP 中,使用LYP 相关泛函(和上面B3LYP 的说明相同)。另一个版本MPW1PW91 使用了修正的Perdew-Wang 交换和Perdew-Wang 91 相关[468]。Becke 于1998 年对B97 的修订[486,487]关键字是B98,它意味着参考文献[487]中的方程2c。Handy,Tozer 等对B97 的修正B971 [482]。Wilson,Bradley和Tozer 对B97的修正B972 [488]。Perdew,Burke和Ernzerhof 于关键字是PBE1PBE。这个泛函使用25%的交换和75%的相关加权。函[472]半对半泛函表示下面的泛函:BhandH: 5*ExHF+5*ExLSDA+EcLYPBHandHLYP: 5*ExHF+5*ExLSDA+5*ΔExBecke88+EcLYP注意:它们不同于Becke 提出的“半对半”泛函( J C P 98 (1993)1372)。包含这些泛函用于向下兼容。用户定义模型。Gaussian 03 可以使用具有下列一般形式的任何模型:P2ExHF + P1(P4ExSlater + P3ΔExnon-local) + P6Eclocal + P5ΔEcnon-local目前可用的局域交换泛函只有Slater(S)泛函,它只能用作局域交换。也可以使用任何非局域交换泛函与能组合的相关泛函的组合(见前面的列表)。公式中的六个参数值可以用多种非标准选项输入到程序:IOp(3/45= mmmmnnnn)指定P1为mmmm/1000,P2为nnnn/通常P1的值设为0 或0,要看是否需要使用交换泛函而定。幅度的调整由P3和P4控制。IOp(3/46= mmmmnnnn)指定P3为mmmm/1000,P4为nnnn/1000。IOp(3/47= mmmmnnnn)指定P5为mmmm/1000,P6为nnnn/1000。例如,IOp(3/45=10000500)设置P1为0,P2为5。注意所有的值必须用四个数值表示,并加入需要的零。这是计算执行路径部分,指定的泛函相当于B3LYP 关键字:# BLYP IOp(3/45=10000200) IOp(3/46=07200800) IOp(3/47=08101000)注意:在Gaussian 03中,设置混合泛函因子的参数已改为由层3的选项设置,有些选项还使用了更多的数字。例如:Gaussian 98 Gaussian 03IOp(5/42=N) IOp(3/74=N)IOp(5/45=K) IOp(3/76=K) where K<0IOp(5/45=MMMMNNNN) IOp(3/76=MMMMMNNNNN)IOp(5/46=MMMMNNNN) IOp(3/77=MMMMMNNNNN)IOp(5/47=MMMMNNNN) IOp(3/78=MMMMMNNNNN)