文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
1.4 阶段的组合
反编译器的实际实现通常是把第 1.3 节列出的几个反编译器阶段组合在一起。正如图 1-13 所示,分成三个不同的模块:前端、UDM 和后端。
图 1-13: 反编译器的模块
前端由那些机器依赖的和机器语言依赖的阶段组成。这些阶段包括词汇的、句法的和语义的分析,以及中间代码生成和控制流向图生成。总而言之,这些阶段产生一个中间的、与机器无关的程序表示法。
UDM 即 universal decompiling machine(通用反编译机器);它是一个完全独立于机器和语言的中间模块,而且它是进行反编译分析的核心。这个模块包括两个部分:数据流分析器和控制流分析器。
最后,后端由那些高级语言依赖的或目标语言依赖的阶段组成。这个模块是代码生成器。
在编译器理论中,阶段的组合是编译器作者为不同机器、不同语言建造编译器的机制。如果为不同的机器重新编写一个编译器后端,那么该机器的新编译器使用原来的前端构成。类似地,可以为别的高级语言定义编写一个新前端,然后跟原来的后端一起使用。这个方法的实现实际上会由于它固有选择的中间代码表示法而受到一定限制。
理论上,反编译器的阶段组合使得为各种不同机器和语言编写反编译器变得容易些:为不同机器编写不同的前端,为不同的目标语言编写不同的后端。在实际应用中,其成果总是受制于它所采用的中间语言的普遍适用程度。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论