逆向C语言编程pdf,逆向编译技术.pdf

本文由月光下的紫眸贡献

逆向编译技术

逆向编译技术

原文:Reverse Compilation Techniques

作者:Cristina Cifuentes

下载:.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年出现

ca'):“一个反编译方法学”[CG93] 和“反编译使用的一个结构化的算法”[Cif93]

。前一篇文章提出反编译的阶段(如第1章第1.3节所述)、前端(第4章)、控制流分析阶

段的初始工作(第6章)、以及dcc工作实现的说明。后一篇文章提出控制流分析阶段使

用的结构化的算法(第6章)。一篇刊物文章“二进制程序的反编译”[CG94] 已经被《

立一个反编译器所使用的技术(第4,5,6,7章的摘要)、在反编译过程中如何借助签名生

成器工具(第8章第8.2节)、以及用dcc反编译的一个程序样本(第9章)。有两篇文章目

前正考虑在国际刊物上发表。“子过程之间数据流的反编译”[Cif94a]被提交给《程

析器的优化操作,把低级的中间代码转换成一个高级的表示法。“结构化反编译图”

向图的最后的改进方法,以及用dcc反编译的一个程序样本。

本论文提出的技术更充分地拓展文献中前人的工作。关于为了确定寄存器参数和

寄存器返回值所需要做的子过程寄存器分析、为了清除掉有关栈的指令(即push和pop

)所需要的分析、以及控制结构类集之结构化,过去没有相关的反编译研究文献。这次

研究做的创新性工作在第5,6,8章描述。第5章第5.2节、第5.4节举例并且描述九种不

page 1

同类型的优化,将低级中间代码转换成高级表示法。这些优化考虑条件码、子程序调

用(即,子过程之间的分析)和寄存器漏出(spill),清除掉中间指令的所有低级特征(

比如条件码和寄存器),而且把高级概念之表达式引入中间表示法。第6章第6.2节、第

6.6节举例并且描述将各种不同类型的循环和条件转移包括多分支条件(例如case语句

)结构化的算法。在这个领域中前人的工作成果主要集中在循环的结构化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值