您好,欢迎光临本网站![请登录][注册会员]  
文件名称: 逆向编译技术 [[评价可免费]
  所属分类: 其它
  开发工具:
  文件大小: 800kb
  下载次数: 0
  上传时间: 2008-06-27
  提 供 者: xcn****
 详细说明: 首先关于 [评价可免费] 的严重声明: 一、评价=评论加评价(评星星); 二、评价必须是下载完了该资源后的评价,没下载就评论无效; 三、如果正确评价了,返还积分可能需要等等,系统需要反应下。呵呵 评论时记得要评分。然后会返回给你花费的分再加1分.理论上有十分就可以下载完所有的资源了。一般人我不告诉他。 逆向编译技术

原文:
Reverse Compilation Techniques

作者:
Cristina Cifuentes

下载:
http://www.itee.uq.edu.au/~cristina/dcc.html

翻译:
月中人 【看雪论坛】

时间:
2007-5-1






摘要
< ;br>

本论文提出逆向编译器或反编译器的编写技术。这些技术基于编译器和优化理论,并以独特的方式应用于反编译;这些技术以前从未被公开发表。

反编译器由几个阶段组成,即被组织成与语言或机器特征相关的几个模块。前端是一个机器依赖的模块,句法分析二进制程序、分析其指令的语义、并且生成该程序的低级中间表示法和每一子程序的控制流向图。通用的反编译机器是一个与语言和机器无关的模块,分析低级中间代码,将它转换成对任何高级语言都可接受的高级表示法,并且分析控制流向图的结构、把它们转换成用高级控制结构表现的图。最后,后端是一个目标语言依赖的模块,生成目标语言代码。

反编译的过程中要使用一些工具:把二进制程序装入内存,对这一程序做句法分析或反汇编,以及反编译或者分析该程序来生成高级语言程序。这个过程借助编译器和库的签名来识别特定的编译器和库子程序。只要在二进制程序中识别出编译器签名,就不去反编译这些编译器启动代码(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



作者承认这篇论文中使用的所有商标、注册名称或专利商品名是它们各自拥有者的合法财产。




--------------------------------------------------------------------------------

← 上一页 下一页 → ...展开收缩
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 相关搜索: 编程 逆向
 输入关键字,在本站1000多万海量源码库中尽情搜索: