[原创]反编译原理(0)-前言
反编译原理(0)-前言
反编译器是软件逆向工程的重要组成部分,它是编译器的逆过程,要想实现反编译器,需要熟悉反编译原理。反编译原理可以看成是编译原理的超集,可以从各种开源的二进制编译器、虚拟机JIT编译器、二进制分析工具和相关编译原理书籍论文学习编译原理,从开源反编译器和相关反编译论文学习反编译原理。本专题分成14个章节。
反编译原理(1)-高级编译器设计原理
概述反编译原理,把反编译器看成是高级编译器(JIT编译器)的一种。本章节在编译原理的内容上以介绍编译原理相关书籍为主;本章节在反编译原理内容上以简述反编译原理相关论文为主。
反编译原理(2)-中间表示
反编译器和编译器一样,都分成前端、中端和后端三个部分,每一部分都有1-2种中间语言,重点是中后端中间语言(IR)的实现,本章节在编译原理的内容上以鲸书“高级编译器的设计与实现”第4章为主;本章节在反编译原理内容上概述LLVM IR。
反编译原理(3)-运行时支持
本章节在编译原理的内容上以简述鲸书“高级编译器的设计与实现”第5章为主;本章节在反编译原理内容上概述主流操作系统、编译器、处理器的相关特性。
反编译原理(4)-代码生成
本章节在编译原理的内容上以简述鲸书“高级编译器的设计与实现”第6章为主;本章节在反编译原理内容上概述反编译器从前端的汇编指令IR语义转化成中端IR的实现。
反编译原理(5)-控制流分析
本章节在编译原理的内容上以简述鲸书“高级编译器的设计与实现”第7章为主;本章节在反编译原理内容上以反编译原理相关论文为主,概述从中端IR转成后端IR时高级控制流程图重建的方法。
反编译原理(6)-数据流分析
本章节在编译原理的内容上以简述鲸书“高级编译器的设计与实现”第8章到第10章为主;本章节在反编译原理内容上以反编译原理相关论文为主,概述从中端IR转成后端IR时变量和变量类型重建的方法。
反编译原理(7)-中端优化
本章节在编译原理的内容上以简述鲸书“高级编译器的设计与实现”第11章到第15章;本章节在反编译原理内容上以简述反编译原理相关论文为主,概述一些主要的优化。
反编译原理(8)-寄存器分配
本章节在编译原理的内容上以简述鲸书“高级编译器的设计与实现”第16章为主;本章节在反编译原理内容上简述从中端IR转成后端IR时用寄存器分配的方法进行后端IR变量的生成。
反编译原理(9)-后端优化
本章节在编译原理的内容上以简述鲸书“高级编译器的设计与实现”第17章到第19章;本章节在反编译原理内容上以简述反编译原理相关论文为主,还简述了用编译原理前端词法和语法分析的方法对反编译器后端IR进行优化。
反编译原理(10)-C反编译器实现
简述C反编译器的一些开源实现,并探讨了以开源反编译器RetDec为基础,实现商业反编译器的可能性。
反编译原理(11)-Objective-C反编译器实现
简述在C反编译器的基础上实现IOS平台上的Objective-C反编译器。
反编译原理(12)-Java反编译器实现
简述虚拟机JVM/Dalvik VM Java Decompiler反编译器的实现。
反编译原理(13)-VMP还原
用反编译原理进行VMP还原。
反编译原理(14)-Hex-Rays反编译器不完全分析 IDA Pro反编译插件Hex-Rays Decompiler是反编译器的事实标准,本章节对它进行不完全分析。
有些章节不一定能够完成。
