質問:
巨大なプロジェクトでクラッシュしないオープンソースのJavaデコンパイラーは、高度なJavaの概念を理解しています
Nicolas Raoul
2014-02-05 06:38:56 UTC
view on stackexchange narkive permalink

Javaデコンパイラーは、 .class ファイルを .java ファイルに戻します。逆コンパイルされたコードは完全ではありませんが(コメントがない、名前が難読化されているなど)、ハッキングの競争中に、プロプライエタリソフトウェアによってロックされたデータを解放したり、好奇心を満たすために役立ちます。

いくつかのオープンソース逆コンパイラがありますが、私が試したものは巨大なJavaプロジェクトでクラッシュしたり、最適でない変数名を生成したり、 Javaコードに準拠していないコード形式を使用したりしたため、実際には満足していません。規則

逆コンパイラーは、最近のすべての概念(たとえば、ジェネリック)を理解し、きれいに表示できる必要があります。

私はjadをeclipseプラグインjadclipseと一緒に使用します。単一のクラスのみを逆コンパイルするため、何が起こっているのかを把握するのに役立ち、プロジェクトのサイズに依存するべきではありません。
@JensPiegsa: jadはオープンソースではなく、バグがあるにもかかわらず維持されていません。
Plesaeには、検討した逆コンパイラーのリストと、それらが基準に達していない理由が含まれています。
二 答え:
Jayan
2014-03-08 12:33:17 UTC
view on stackexchange narkive permalink

CFRを使用しましたが、出力は良好に見えます。ジェネリックスを理解し、フォーマットはクリーンです。命名(ローカル変数)がより良いかどうかはわかりません。命名の問題を示す例を次に示します。

java.util.ArrayDequeue(

  private void doubleCapacity(){int n; assert(this.head == this.tail); int n2 = this.head; int n3 = this.elements.length; int n4 = n3-n2; if((n = n3 << 1)< 0){throw new IllegalStateException( "Sorry、 deque too big ");} Object [] arrobject = new Object [n]; System.arraycopy(this.elements、n2、arrobject、0、n4); System.arraycopy(this.elements、0、arrobject、n4、n2 ); this.elements = arrobject; this.head = 0; this.tail = n3;}  

オリジナルと比較

  private void doubleCapacity( ){assert head == tail; int p = head; int n = elements.length; int r = n --p; // pの右側の要素数intnewCapacity = n << 1; if(newCapacity < 0)新しいスローIllegalStateException( "申し訳ありませんが、両端キューが大きすぎます"); Object [] a = new Object [newCapacity]; System.arraycopy(elements、p、a、0、r); System.arraycopy(elements、0、a、r、p);要素=(E [])a;ヘッド= 0; tail = n;}  

コンテキストベースの名前を取得することは、ほとんどの逆コンパイラーの範囲外です。

作成者は友人のプロジェクト procyonにリンクしています。 、オープンソース独自の比較ページがあります。ページから...

Procyonデコンパイラーは、Java 5以降の言語拡張を処理し、他のほとんどのデコンパイラーは処理しません。また、他の人が不足している分野でも優れています。特にProcyonは、以下でうまく機能します。

 列挙型declarationsEnumおよびStringswitchステートメント(これまでのところjavac 1.7に対してのみテスト済み)ローカルクラス(匿名と名前付きの両方)アノテーション
Java 8ラムダとメソッド参照(つまり、::演算子)。 
残念ながら、CFRはオープンソースではありません:-/ http://www.benf.org/other/cfr/faq.htmlを参照してください。「*もう少し洗練されるまでソースを公開しません*」。バイナリのみがMITライセンスの下にあるため、オープンソースではありません。
ソースは現在[GitHub](https://github.com/leibnitz27/cfr)で公開されています。
Irgendw Pointer
2014-02-08 17:02:34 UTC
view on stackexchange narkive permalink

EmmanuelDupuyのJavaDecompilerを使用しました。私にとっては、jarファイル用の優れた逆コンパイラです。ソースコードを入手しました。 WindowsGUIバージョンを使用してjarファイルを逆コンパイルしました。

  • 使いやすい
  • ナビゲーションおよび検索機能
  • jarプロジェクトのツリーを表示します。

私にとっては良い解決策であり、非常に迅速でした。

努力に感謝しますが、オープンソースではありません。 https://en.wikipedia.org/wiki/Java_Decompiler
申し訳ありませんが、私はあなたの質問を見て、オープンソースバージョンが必要だとは考えていませんでした。
@NicolasRaoul逆コンパイラーがあるのに、なぜオープンソースが必要なのですか? :)


このQ&Aは英語から自動的に翻訳されました。オリジナルのコンテンツはstackexchangeで入手できます。これは、配布されているcc by-sa 3.0ライセンスに感謝します。
Loading...