必须有一百万本关于构建编译器的理论和技术的书籍和论文。反向做是否有资源?我对任何特定的硬件平台都不感兴趣。寻找能够深入研究主题和难点的好书/研究论文。
答案 0 :(得分:2)
我参与过AS3和Java反编译工作,我可以向你保证,我在反编译方面学到的一切都直接来自编译器理论。中间表示,数据流分析,术语重写和其他相关概念都可以在龙书中找到。
答案 1 :(得分:1)
反编译实在是用词不当。反编译器将目标代码编译为源表示。在许多方面,它们比传统编译器更容易编写 - “源代码”代码已经过语法检查,通常格式非常精确。
他们构建一个符号表(地址)并构造应用程序的目标语言表示。通常的困难是原始编译器必须通过删除常见的子表达式,从循环中提升常量代码以及许多其他类似技术来或多或少地优化原始应用程序。这些通常无法用目标语言表示。
如果源是一个定义良好的VM,那么这个优化通常留给JIT编译器,并且生成的反编译代码非常易读 - 在许多情况下几乎与原始代码相同。这种类型的编译器通常在目标代码中留下一些或所有符号,以允许这些符号被恢复。其他包括行号以帮助调试和故障排除。这些都有助于恢复原始代码。
作为一个计数器,有代码混淆器故意对代码执行转换,阻止通过加扰名称简单恢复原始源,更改生成的序列代码(不改变其结果含义)并引入有结构的构造没有源语言等价物。
答案 2 :(得分:0)
我写过关于动态语言here的反编译器。
请注意,这适用于具有自定义(高级)VM的动态语言。