返回介绍

第 5 章 数据流分析

发布于 2025-03-09 23:09:33 字数 795 浏览 0 评论 0 收藏 0

由前端生成的低级中间代码是一个汇编类型的表示法,它使用寄存器和条件码。这个表示法能够被转换成一个不使用这些低级概念而是重新生成高级概念之表达式的、更高级的表示法。从低级中间代码到高级中间代码的转换是通过程序转换来完成,传统上称之为优化。对低级的中间代码应用这些转换,把它转变成第 4 章第 4.3.2 节所描述的高级中间代码。这个阶段跟前端以及控制流分析阶段的关系见图 5-1 所示。

图 5-1: 数据流分析阶段的上下文

数据流分析阶段需要的转换类型包括,无用指令的清除、条件码的清除、寄存器参数和函数返回寄存器(组) 的确定、通过再生表达式来清除寄存器和中间指令、实际参数的确定、以及在跨子程序调用之间传播数据类型。这些转换大多数是为了改善低级中间代码的质量所必需要的,也是为了重建一些在编译过程中丢失的信息所必需要的。就无用指令的清除来说 (请看第 5.2.1 节的例子),对于优化的编译器,当有的机器指令一次执行多于一个功能的时候,这一步骤可以说是很必要的。

传统的数据流分析是这样一个过程,它收集关于变量在程序中被如何使用的信息、并且以集合的形式做出统计。这个信息被反编译器用于转换和改善中间代码的质量。为了改善代码所做的转换要求具备如下几个性质 [ASU86b]:

1. 转换必须无损程序的含义。

2. 转换必须是值得做的。

这一章讨论中间代码的反编译优化技术。首先通过例子说明是什么样的转换,然后给出每一种优化的算法。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文