Maple-IRは、Java Bytecodeの産業用IRベースの静的分析フレームワークです。現在、SSA-Formベースの分析と、BytecodeからIRへの建設と破壊を実装しています。ツールチェーンはByteCode入力を取り、SSA IRに持ち上げ、IRを変換し、ByteCodeに再コンパイルします。これは、バイナリNinjaまたはIda Proの16進レイがどのように動作するかと同様に、スタックをシミュレートしながら各メソッドを象徴的に実行することによって行われます。陽性データフロー分析が完全に実装されており、一定の折りたたみやコピーの提案などの最適化も実装されています。 CFG GraphViz Exporterも利用できます。例については、以下を参照してください。
Maple-IRは積極的な開発にありません。コードの貢献は歓迎されますが、それは無期限に休止しています。問題トラッカーに関する質問、コメント、問題を提出してください。
現在の形のメープルイルはまだ生産対応ではありませんが、ほとんど努力しても作ることができます。
Maple-IRを使用している場合は、お知らせください!あなたがそれを使用するクールなプロジェクトについて聞いてみたいです。

「LLVMのようなものですが、さらに悪いことです。」
以下は、次のコードの最適化された破壊(Post-SSA)IRのGraphVizの視覚化です。
void test130 () {
int x = 5 ;
int y = 10 ;
do {
try {
trap ( x , y );
y = x ;
trap ( x , y );
y = 123 ;
} catch ( RuntimeException e ) {
do {
trap ( x , y );
int z = y ;
trap ( x , y );
y = x ;
trap ( x , y );
x = z ;
trap ( x , y );
} while (! p ());
}
} while ( p ());
System . out . println ( x );
System . out . println ( y );
}
これは、Fernflowerの逆コンパイラから取得した最適化されたSSA形式の厄介な機能です。
SSA破壊は、Sreedharらの方法を使用して実装されています。 Boissinot et al .. Boissinot Destructorは現在、デフォルトのデストラクタです。 SSA構造は、ドミナンスフロンティアを使用したCytron et al。の方法に基づいて、速い1パス線形スキャンアルゴリズムに基づいて実装されています。詳細については、ssagenpass.javaを参照してください。バイトコードの破壊は、例外範囲のため、Javaでは難しいです。さらに、ループネスティングのため、コントロールフローグラフ(CFG)を簡単な方法で線形化することは困難です。線形化は、Tarjanのスーパー接続コンポーネントアルゴリズムを再帰的に適用することにより処理されます。各メソッドの例外テーブルは、制御フローグラフの構造に基づいて破棄および再生されます。詳細については、controlflowgraphdumperを参照してください。
詳細については、ホワイトペーパーをご覧ください。
javac念頭に置いて設計されていませんでした。これは、たとえば、 finallyブロックが正しく処理されることを意味しますが、きちんとしていません。 構築するには:
mvn clean compile test package
ビルドは2つの瓶を生成します。1つは依存関係を含む1つ( mapleir-full.jar )、もう1つは( mapleir-full-with-deps.jar )です。各モジュールを個別に使用することもできます。
次に、オプション:
mvn install
JitPackでMaple-IRを入手することもできます。
連絡先:問題を提出してください、私はできるだけ早く応答するために最善を尽くします。
共有は報告につながり、打ち負かされます(祝福)
Maple-IRはGPLV3の下でライセンスされています。詳細については、こちらをご覧ください。
著作権(c)2022 biblおよびrcx