8

(関連する質問:gotoをサポートするJavaコンパイラまたはJVM言語?

jarを逆コンパイルし(通常、デバッグ目的で)、再コンパイルしたいと思います。

JADJDの両方を使用しましたが、goto命令が原因で両方ともコンパイルされません

例えば

      goto _L1

      ...
      L1: 
      return true;

それを再コンパイルする簡単な方法(または任意の方法)はありますか?(手動でリファクタリングしてgoto'を削除する場合を除く)


4

4 に答える 4

10

いいえ、ありません。あなたの場合、JDもJADもクラスファイルを正しく逆コンパイルできませんでした。'goto'ステートメントは、実際のプログラムフローに関するヒントです。

Java Decompilerチームに直接連絡し、逆コンパイルによって不正なソースコードが生成されるクラスファイルを送信して、それが現在のバージョンのバグなのか、まだ実装されていない機能なのかを尋ねることができます。

于 2010-01-10T12:39:13.787 に答える
8

JADは本当に素晴らしい逆コンパイラです。JD...「try-catch-finally」ステートメントにいくつかの問題があります。

Stiverの逆コンパイラー(http://www.reversed-java.com/fernflower)を試しましたか?

JDの作者であるエマニュエル。

于 2010-02-25T19:48:15.800 に答える
4

すべての逆コンパイラーは、Javaソース構造に対応するコードパターンを探し、最適なソースを選択します。

どうやらあなたが持っているコードはJADまたはJDのどちらにも保存されているパターンに準拠していないので、コンパイルできないJavaソースを取得します。これは、JADが数年間積極的に開発されていないことが原因である可能性があります。

より積極的な逆コンパイラーを備えたSootプロジェクトをご覧になることをお勧めします。

http://www.sable.mcgill.ca/soot/

于 2010-01-10T13:14:20.043 に答える
0

CFRやFernFlowerのような最新の逆コンパイラーをお勧めします!

私は6つのJavaデコンパイラーをオンラインで公開しました:Jadx、高速でAndroidをサポート、CFR(Java 8をサポート)、JDCore(非常に高速)、Procyon、Fernflower、JAD(非常に高速ですが、時代遅れ)。

ここにインストールせずにそれらを使用することができます:http ://www.javadecompilers.com/

于 2015-08-21T11:26:43.017 に答える