4

必须有一百万本关于构建编译器的理论和技术的书籍和论文。有没有做相反的资源?我对任何特定的硬件平台都不感兴趣。寻找深入研究主题和困难的好书/研究论文。

4

3 回答 3

2

我曾研究过 AS3 和 Java 反编译器,我可以向您保证,我在反编译方面学到的一切都是直接来自编译器理论的。中间表示、数据流分析、术语改写等相关概念都可以在龙书中找到。

于 2011-07-02T18:17:56.370 回答
1

反编译真的是用词不当。反编译器将目标代码编译成源代码表示。在许多方面,它们比传统编译器更容易编写——“源”代码已经过语法检查,并且通常非常精确地格式化。

他们建立一个符号表(地址)并构建应用程序的目标语言表示。通常的困难是原始编译器必须通过删除常见的子表达式、将常量代码提升到循环之外以及许多其他类似技术来或多或少地优化原始应用程序。这些通常不可能用目标语言来表示。

如果源代码用于定义良好的 VM,那么这种优化通常留给 JIT 编译器,由此产生的反编译代码非常易读——在许多情况下几乎与原始代码相同。这种类型的编译器通常会在目标代码中留下部分或全部符号,以便恢复这些符号。其他包括有助于调试和故障排除的行号。这些都有助于恢复原始代码。

作为反击,有一些代码混淆器故意对代码执行转换,通过打乱名称来防止简单恢复原始源,更改生成的序列代码(不改变其结果含义)并引入没有源语言的结构相等的。

于 2011-04-27T19:12:32.173 回答
0

我在这里写过动态语言的反编译器。

请注意,这适用于具有自定义(高级)VM 的动态语言。

于 2018-02-15T17:56:04.063 回答