Maple-IR adalah kerangka analisis statis berbasis IR industri untuk java bytecode. Saat ini, ia mengimplementasikan analisis berbasis bentuk SSA serta konstruksi dan penghancuran dari bytecode ke IR. Toolchain mengambil input bytecode, mengangkatnya ke SSA IR, mengubah IR, kemudian mengkompilasi ulang kembali ke bytecode. Ini dilakukan dengan secara simbolis mengeksekusi setiap metode saat mensimulasikan tumpukan, mirip dengan bagaimana Ninja Biner atau Ida Pro's Hex-Ray beroperasi. Analisis aliran data intraprocedural sepenuhnya diimplementasikan, dan optimisasi seperti lipatan konstan dan propogasi salin juga diimplementasikan. Eksportir CFG GraphViz juga tersedia; Lihat di bawah untuk contoh.
Maple-IR tidak dalam pengembangan aktif. Ini pada hiatus tanpa batas waktu, meskipun kontribusi kode dipersilakan. Silakan mengajukan pertanyaan, komentar, dan masalah pada pelacak masalah.
Maple-IR dalam bentuk saat ini belum siap-produksi, meskipun dapat dilakukan dengan sedikit usaha.
Jika Anda menggunakan Maple-IR, beri tahu kami! Kami ingin mendengar tentang proyek keren yang Anda gunakan.

"Ini seperti LLVM, tapi lebih buruk."
Berikut ini adalah visualisasi GraphViz untuk IR yang dioptimalkan, dirusak (POST-SSA) untuk kode berikut:
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 );
}
Berikut adalah fungsi yang lebih nastier, dalam bentuk SSA yang dioptimalkan, diambil dari dekompiler Fernflower:
Penghancuran SSA diimplementasikan menggunakan metode Sreedhar et al. dan Boissinot et al .. Boissinot Destructor saat ini adalah destruktor default. Konstruksi SSA diimplementasikan berdasarkan algoritma pemindaian linier 1-pass yang cepat berdasarkan pada metode Cytron et al. Menggunakan Dominasi Perbatasan. Untuk detail lebih lanjut lihat ssagenpass.java. Penghancuran bytecode rumit di java karena rentang pengecualian. Selain itu, lineearisasi grafik aliran kontrol (CFG) secara sederhana sulit karena sarang loop. Linierisasi ditangani dengan secara rekursif menerapkan algoritma komponen superconnected Tarjan. Tabel pengecualian untuk setiap metode dibuang dan diregenerasi berdasarkan struktur grafik aliran kontrol. Untuk detail lebih lanjut, lihat ControlFlowGraphDumper.
Untuk detail lebih lanjut, lihat whitepaper.
javac . Ini berarti, misalnya, finally blok diproses dengan benar, meskipun tidak rapi. Untuk membangun:
mvn clean compile test package
Bangunan akan menghasilkan dua stoples, satu dengan dependensi termasuk ( mapleir-full.jar ), dan satu tanpa ( mapleir-full-with-deps.jar ). Anda juga dapat menggunakan setiap modul secara individual.
Kemudian, secara opsional:
mvn install
Anda juga bisa mendapatkan Maple-IR di Jitpack.
Kontak: Silakan ajukan masalah, saya akan melakukan yang terbaik untuk merespons secepat mungkin.
Berbagi akan mengarah pada yang dilaporkan dan dikalahkan (memberkati)
Maple-IR dilisensikan di bawah GPLV3. Untuk informasi lebih lanjut, silakan lihat di sini.
Hak Cipta (C) 2022 Bibl dan RCX