阅读:9302回复:24
《逆向编译技术》中文版CHM格式原始出处:http://bbs.pediy.com/showthread.php?t=44518 逆向编译技术 原文: Reverse Compilation Techniques 作者: Cristina Cifuentes 下载: http://www.itee.uq.edu.au/~cristina/dcc.html 翻译: 月中人 【看雪论坛】 时间: 2007-5-1 摘要 本论文提出逆向编译器或反编译器的编写技术。这些技术基于编译器和优化理论,并以独特的方式应用于反编译;这些技术以前从未被公开发表。 反编译器由几个阶段组成,即被组织成与语言或机器特征相关的几个模块。前端是一个机器依赖的模块,句法分析二进制程序、分析其指令的语义、并且生成该程序的低级中间表示法和每一子程序的控制流向图。通用的反编译机器是一个与语言和机器无关的模块,分析低级中间代码,将它转换成对任何高级语言都可接受的高级表示法,并且分析控制流向图的结构、把它们转换成用高级控制结构表现的图。最后,后端是一个目标语言依赖的模块,生成目标语言代码。 反编译的过程中要使用一些工具:把二进制程序装入内存,对这一程序做句法分析或反汇编,以及反编译或者分析该程序来生成高级语言程序。这个过程借助编译器和库的签名来识别特定的编译器和库子程序。只要在二进制程序中识别出编译器签名,就不去反编译这些编译器启动代码(start-up)和库子程序:对于前者,从最后的目标程序去掉启动代码的那些例程,反编译器从主(main)程序入口点开始分析;对于后者,那些子程序用其库函数名代替。 所提出的技术在一个适用于Intel i80286体系结构的反编译器(原型)样机上得以实现,该样机名为dcc,在DOS操作系统下运行,为输入源的.exe文件或.com文件产生目标C程序。在第9章,将反编译输出的程序同它最初的高级语言程序做了采样比较,并且对反编译结果做出一个分析。 第1章从编译器角度对反编译做一介绍,第2章从20世纪60年代早期反编译出现开始介绍它的历史概况,第3章介绍源二进制程序的静态二进制代码和在运行时间实现程序的动作之间的关系,第4章描述前端模块这个阶段,第5章详细说明用来分析中间代码的数据优化技术,把中间代码转换成一个更高级的表示法,第6章详细说明用来分析控制流向图结构的控制结构转换技术,把控制流向图转换成一个高级控制结构的图,第7章描述后端模块,第8章介绍反编译工具程序,第9章综述dcc的实现以及取得的成果,第10章给出结论以及这项研究的工作前景。 本论文有些部分已经公开发表或者提交给国际定期刊物。两篇文章在1993年出现在第19号《拉丁美洲信息会议》(XIX 'Conferencia Latinoamericana de Informatica'):“一个反编译方法学”[CG93] 和“反编译使用的一个结构化的算法”[Cif93]。前一篇文章提出反编译的阶段(如第1章第1.3节所述)、前端(第4章)、控制流分析阶段的初始工作(第6章)、以及dcc工作实现的说明。后一篇文章提出控制流分析阶段使用的结构化的算法(第6章)。一篇刊物文章“二进制程序的反编译”[CG94] 已经被《软件-实践与经验》(Software - Practice & Experience)接受发表;这篇文章概述建立一个反编译器所使用的技术(第4,5,6,7章的摘要)、在反编译过程中如何借助签名生成器工具(第8章第8.2节)、以及用dcc反编译的一个程序样本(第9章)。有两篇文章目前正考虑在国际刊物上发表。“子过程之间数据流的反编译”[Cif94a]被提交给《程序语言杂志》(the Journal of Programming Languages),文中完整描述了数据流分析器的优化操作,把低级的中间代码转换成一个高级的表示法。“结构化反编译图”[Cif94b] 被提交给《计算机杂志》(The Computer Journal),文中给出结构化控制流向图的最后的改进方法,以及用dcc反编译的一个程序样本。 本论文提出的技术更充分地拓展文献中前人的工作。关于为了确定寄存器参数和寄存器返回值所需要做的子过程寄存器分析、为了清除掉有关栈的指令(即push和pop)所需要的分析、以及控制结构类集之结构化,过去没有相关的反编译研究文献。这次研究做的创新性工作在第5,6,8章描述。第5章第5.2节、第5.4节举例并且描述九种不同类型的优化,将低级中间代码转换成高级表示法。这些优化考虑条件码、子程序调用(即,子过程之间的分析)和寄存器漏出(spill),清除掉中间指令的所有低级特征(比如条件码和寄存器),而且把高级概念之表达式引入中间表示法。第6章第6.2节、第6.6节举例并且描述将各种不同类型的循环和条件转移包括多分支条件(例如case语句)结构化的算法。在这个领域中前人的工作成果主要集中在循环的结构化,很少文章尝试二路(2-way)条件分支的结构化,而对于多路条件分支则没有研究说明。本论文提出一个完整的方法,基于一个预先确定的、一般化的高级控制结构集合(类集),对所有类型的结构进行结构化。在第6章第6.4节给出一个确定一般化的控制结构的集合(类集)的标准。第8章描述反编译程序使用的全部工具,最重要工具是签名生成器(第8.2节),它用于在操作系统不共享库的体系结构下确定编译器和库的签名,比如DOS操作系统。 致谢 在20世纪90年代早期,John Gough教授和Bill Caelliin教授提出为现代机器体系结构编写反编译器的可行性问题。这个问题看来可能是对图论和数据流理论领域的一次挑战,因此我决定把寻求二进制程序的逆向编译技术作为我的博士学位论文研究方向。本论文就是对于如何实现它的诸多疑问的回答;而且确实地给出一个反编译器原型。 我要感谢计算技术社区许多人提供时间和资源。John Gough教授提供许多关于数据流分析方面的讨论,而且为该论文每章草稿都提出意见。Sylvia Willie从她的实验室借给我一个办公室和一台PC机。Pete French提供在英国的一台Vax BSD 4.2机器上的一个账号,使我可以通过网络测试Vax反编译器。Jeff Ledermann重新编写了反汇编器。Michael Van Emmerik编写了库签名生成器程序,为一些PC编译器生成编译器和库的签名,把dcc移植到DOS环境下,而且为dcc编写交互式用户界面。Jinli Cao在QUT (QUEENSLAND UNIVERSITY OF TECHNOLOGY)学习期间把一篇反编译方面的中文文章翻译成英文。Geoff Olney校对每一章,指出矛盾之处,而且对论文的布局提出建议。我在攻读这个学位期间由澳大利亚研究生研究奖(APRA)奖学金资助。 Jeff Ledermann和Michael Van Emmerik受雇于澳大利亚研究理事会,ARC授权号No. A49130261。 本论文用LATEX文档预备系统撰写。所有图表使用xfig功能交互式制作生成。 Cristina Cifuentes June 1994 作者承认这篇论文中使用的所有商标、注册名称或专利商品名是它们各自拥有者的合法财产。 |
|
最新喜欢:sherli...
|
沙发#
发布于:2008-06-21 10:15
好!记号!
|
|
板凳#
发布于:2008-06-22 00:04
|
|
地板#
发布于:2008-06-23 21:40
好书,就是缺乏知识啊
|
|
地下室#
发布于:2008-07-02 17:06
狂顶...
|
|
5楼#
发布于:2008-07-12 01:19
应该研究一下
|
|
|
6楼#
发布于:2009-01-15 12:45
很棒的资料,虽然老了些
|
|
7楼#
发布于:2009-02-13 23:07
下载了,谢谢
|
|
8楼#
发布于:2009-02-25 00:18
真的是很不错的饿!谢谢了 啊!
|
|
|
9楼#
发布于:2009-02-27 22:06
下载了,谢谢~~很好
|
|
10楼#
发布于:2009-04-03 08:25
xiale ,xiexie
|
|
11楼#
发布于:2009-04-16 14:06
收藏
|
|
12楼#
发布于:2009-05-04 15:32
MARK
|
|
13楼#
发布于:2009-05-12 22:06
thanks for sharing
|
|
14楼#
发布于:2009-05-27 15:46
非常好的资料。
|
|
15楼#
发布于:2009-08-04 20:48
顶顶,狂顶!好书!
|
|
16楼#
发布于:2009-08-28 17:20
下载了,谢谢
|
|
17楼#
发布于:2009-10-29 22:56
谢谢啊,呵呵
|
|
18楼#
发布于:2009-12-31 18:34
怎么看不到
|
|
19楼#
发布于:2010-02-17 01:05
好东西,再次拜读了
|
|
|
上一页
下一页