首页 文章

反编译JVM语言

提问于
浏览
3

是否可以将Groovy,Scala等JVM语言反编译为初始形式?

如果我尝试反编译一个4行的Groovy类,我会得到大约20行反编译的Java代码 .

它更像是一个理论问题,而不是一个实际问题,因为市场上没有这样的反编译器(我不知道) .

谢谢 .

3 回答

  • 3

    是的,它可能具有Java反编译器可以管理的类似保真度(意思是:代码看起来类似,但不一定相同) .

    但是,您需要为每种语言使用专用的反编译器 .

    编辑:我想我需要澄清我期望的保真程度:

    • 局部变量的名称可能是也可能不是可重现的

    • 循环类型可能被误解释( for 替换为 while ,...)

    • 更一般:可以用两种类似方式完成的事情可能会被误解

    • ......

    所有这些都是反编译Java代码时也会出现的错误,因为从字节代码到Java源代码的关联不是1:1 .

    但是,如果你有一个专门的Groovy反编译器,那么我怀疑它是否能够从反编译的Groovy代码生成 much 更可读的代码,而不是Java反编译器 .

  • 0

    这不一定是可能的 . 例如,一种语言可能会以不可逆的方式破坏它的名称 . 此外,它可以将源语言的不同构造映射到单个Java语言构造 .

    然而,最令人不快的是,java语言(相对于JVM字节码)的功能不足以对源语言的某些概念或构造进行编码,以便它们可以被实现 . Java和JVM字节码已经是这种情况,后者无法表达泛型 .

  • 1

    好吧,我能想到的唯一事情是编译器优化和注释的问题 . 注释不会保留在字节码中(幸运的是),编译器可能会更改源代码以获得更好的性能,除此之外似乎可能 .

相关问题