簡體   English   中英

反編譯JVM語言

[英]Decompiling JVM languages

是否可以將Groovy,Scala等JVM語言反編譯為初始形式?

如果我嘗試反編譯一個4行的Groovy類,我會得到大約20行反編譯的Java代碼。

它更像是一個理論問題,而不是一個實際問題,因為市場上沒有這樣的反編譯器(我不知道)。

謝謝。

是的,它可能具有Java反編譯器可以管理的類似保真度(意思是:代碼看起來類似,但不一定相同)。

但是,您需要為每種語言使用專用的反編譯器。

編輯:我想我需要澄清我期望的保真程度:

  • 局部變量的名稱可以是可重復的,也可以是不可重現的
  • 循環類型可能被錯誤地解釋( for替換while ,...)
  • 更一般:可以用兩種類似方式完成的事情可能會被誤解
  • ...

所有這些都是反編譯Java代碼時也會出現的錯誤,因為從字節代碼到Java源代碼的關聯不是1:1。

但是,如果你有一個專門的Groovy的反編譯器,那么我強烈懷疑它以從反編譯可讀代碼編譯的Groovy代碼比一個Java反編譯器都做不到。

這不一定是可能的。 例如,一種語言可能會以不可逆的方式破壞它的名稱。 此外,它可以將源語言的不同構造映射到單個Java語言構造。

然而,最令人不快的是,java語言(相對於JVM字節碼)的功能不足以對源語言的某些概念或構造進行編碼,從而可以實現它們。 Java和JVM字節碼已經是這種情況,后者無法表達泛型。

好吧,我能想到的唯一事情是編譯器優化和注釋的問題。 注釋不會保留在字節碼中(幸運的是),編譯器可能會更改源代碼以獲得更好的性能,除此之外似乎可能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM