论文部分内容阅读
反编泽是将较为低级的程序代码翻译成与之等价的、更为高级和抽象的程序语言表示的过程。作为软件逆向工程的重要组成部分,反编译在软件移植、恶意代码检测、程序调试以及软件维护与理解等方面起着十分重要的作用。虽然很早就开始了与反编译相关的研究(1960年),并且未曾中断,然而一直以来都还没有形成一套系统的理论和方法,并且随着程序设计语言理论和编泽器技术的发展,反编泽的研究内容和对象也在不断变化。
本文在已有的反编译研究的基础之上,针对现有的C语言反编译器提出了一个基于抽象语法树的反编译器自动评测方法,用于帮助改进现有反编译器的设计,并在CIL系统的基础上实现了一个比较系统SDdiff,通过对dcc,DECLER,Boomerang和Hex-Rays这四种C语言反编译器的反编译效果的评测表明该方法能有效地对反编译器的反编译效果进行自动评测,同时也揭示了反编泽技术随着时间的推移在不断进步和发展。
此外,本文还描述了一个基于栈空间分析的反编译中问代码生成系统Rene,与传统基于模式匹配的方法不同的是,Rene通过分析函数中各点的当前栈偏移来恢复局部变量和函数参数,并以此处理函数调用语句。该方法克服了模式匹配通用性差的缺点,并且能够减少函数内无关的操作语句,从而能够生成更为简洁的中间代码。