逆向C语⾔编程pdf,逆向编译技术.pdf 本⽂由⽉光下的紫眸贡献
逆向编译技术
逆向编译技术
原⽂:Reverse Compilation Techniques
作者:Cristina Cifuentes
下载:.au/~cristina/dcc.html
翻译:⽉中⼈ 【】
时间:2007-5-1
摘要
本论⽂提出逆向编译器或反编译器的编写技术。这些技术基于编译器和优化理论
,并以独特的⽅式应⽤于反编译;这些技术以前从未被公开发表。
反编译器由⼏个阶段组成,即被组织成与语⾔或机器特征相关的⼏个模块。前端
是⼀个机器依赖的模块,句法分析⼆进制程序、分析其指令的语义、并且⽣成该程序
的低级中间表⽰法和每⼀⼦程序的控制流向图。通⽤的反编译机器是⼀个与语⾔和机
器⽆关的模块,分析低级中间代码,将它转换成对任何⾼级语⾔都可接受的⾼级表⽰
法,并且分析控制流向图的结构、把它们转换成⽤⾼级控制结构表现的图。最后,后
端是⼀个⽬标语⾔依赖的模块,⽣成⽬标语⾔代码。
反编译的过程中要使⽤⼀些⼯具:把⼆进制程序装⼊内存,对这⼀程序做句法分
析或反汇编,以及反编译或者分析该程序来⽣成⾼级语⾔程序。这个过程借助编译器
和库的签名来识别特定的编译器和库⼦程序。只要在⼆进制程序中识别出编译器签名
,就不去反编译这些编译器启动代码(start-up)和库⼦程序:对于前者,从最后的⽬
标程序去掉启动代码的那些例程,反编译器从主(main)程序⼊⼝点开始分析;对于后
者,那些⼦程序⽤其库函数名代替。
所提出的技术在⼀个适⽤于Intel i80286体系结构的反编译器(原型)样机上得以
实现,该样机名为dcc,在DOS操作系统下运⾏,为输⼊源的.exe⽂件或⽂件产⽣
⽬标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
c语言编程入门指南pdf
同类型的优化,将低级中间代码转换成⾼级表⽰法。这些优化考虑条件码、⼦程序调⽤(即,⼦过程之间的分析)和寄存器漏出(spill),清除掉中间指令的所有低级特征(
⽐如条件码和寄存器),⽽且把⾼级概念之表达式引⼊中间表⽰法。第6章第6.2节、第6.6节举例并且描述将各种不同类型的循环和条件转移包括多分⽀条件(例如case语句)结构化的算法。在这个领域中前⼈的⼯作成果主要集中在循环的结构化
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论