Sebuah decompiler Java baru bernama garlic-decompiler telah muncul, ditulis sepenuhnya dalam bahasa C dan mengklaim peningkatan performa yang signifikan dibandingkan tools tradisional berbasis Java. Proyek ini bertujuan untuk mengkonversi bytecode Java yang telah dikompilasi kembali menjadi kode sumber yang dapat dibaca, mendukung file .class, arsip JAR, dan file WAR.
Jenis File yang Didukung:
- File .class (bytecode Java)
- File .jar (arsip Java)
- File .war (arsip aplikasi Web)
- File .dex (direncanakan, saat ini belum didukung)
Klaim Performa vs Pemeriksaan Realitas
Developer mengklaim garlic-decompiler berjalan sekitar 10 kali lebih cepat daripada alternatif berbasis Java sambil menggunakan lebih sedikit sumber daya sistem. Binary yang dikompilasi berukuran hanya 300KB, membuatnya sangat ringan. Namun, pengujian awal oleh anggota komunitas mengungkap beberapa masalah pertumbuhan yang khas dari program C yang menangani struktur data kompleks.
Seorang pengguna melaporkan segmentation fault saat memproses file JAR dengan multiple threads yang diaktifkan, menyoroti tantangan manajemen memori dalam C ketika menangani parsing bytecode Java. Developer merespons dengan cepat, meminta file bermasalah tersebut untuk memperbaiki masalah.
Klaim Performa:
- 10x lebih cepat dibandingkan decompiler berbasis Java
- Penggunaan resource lebih rendah dibandingkan alternatif Java
- Dukungan pemrosesan multi-threaded (default: 4 thread)
Tantangan Manajemen Memori Muncul ke Permukaan
Diskusi teknis dalam komunitas telah berfokus pada pendekatan manajemen memori proyek ini. Decompiler menggunakan library string khusus dan mengimplementasikan pool memori terpisah untuk operasi multi-threaded, dengan pool global untuk mode single-threaded.
Namun, developer berpengalaman telah mengidentifikasi masalah potensial di mana kode mencampur string statis dengan string yang dialokasikan heap secara tidak konsisten. Ini menciptakan situasi di mana fungsi pemanggil tidak dapat menentukan dengan benar apakah memori yang dikembalikan harus dibebaskan, berpotensi menyebabkan memory leak atau crash.
Pendekatan Pengembangan dan Rencana Masa Depan
Proyek ini merupakan upaya yang sebagian besar manual, dengan developer menyatakan bahwa 90% dikerjakan dengan tangan, 10% AI - rasio yang dipandang banyak orang dalam komunitas sebagai ideal untuk proyek yang berfokus pada pembelajaran. Motivasinya tampaknya bersifat edukatif dan praktis, bertujuan untuk memahami internal JVM sambil menciptakan tool yang lebih cepat.
Saya sedang menulis bagian decompiling dex dan apk. Kecepatan saat ini sekitar 10 kali lebih cepat daripada Java, dan menggunakan lebih sedikit sumber daya daripada Java.
Pengembangan masa depan mencakup dukungan yang direncanakan untuk file Android DEX, meskipun fitur ini masih belum diimplementasikan. Proyek ini juga mencakup mode seperti javap untuk analisis bytecode yang lebih cepat, dengan atribut LineNumber dan StackMapTable dinonaktifkan untuk meningkatkan performa.
Persyaratan Build:
- cmake >= 3.26
- Tidak ada dependensi lain
- Ukuran binary yang dikompilasi: ~300KB
Kesimpulan
Meskipun garlic-decompiler menunjukkan harapan dengan klaim kecepatan dan desain yang ringan, ia menghadapi tantangan khas program C yang menangani tugas parsing kompleks. Respons developer yang aktif terhadap laporan bug dan sifat edukatif proyek menunjukkan bahwa ia bisa matang menjadi alternatif yang layak untuk decompiler Java yang ada, asalkan masalah manajemen memori diselesaikan. Untuk saat ini, pengguna harus mengharapkan beberapa kekasaran yang khas dari proyek C tahap awal yang menangani analisis bytecode yang rumit.
Referensi: garlic-decompiler