Pada bulan Desember 2022, kami telah resmi merilis SootUp, versi Soot dengan arsitektur yang dirombak total, lebih modular, dapat diuji, dipelihara, dan dapat digunakan. Silakan periksa ini jika Anda ingin memulai proyek analisis program baru.
Karena ada beberapa kebingungan: SootUp belum memiliki fitur lengkap. Oleh karena itu, Soot "lama" perlu tetap digunakan untuk saat ini, terutama untuk proyek yang memerlukan kemampuan instrumentasi atau dukungan Android yang kuat. Jelaga "lama" masih dipertahankan hingga dapat dihapus dengan aman untuk penerus yang memiliki fitur lengkap.
Kami secara teratur mengajukan permohonan pendanaan untuk membantu kami memelihara Jelaga. Anda dapat sangat membantu kami dengan memberi tahu kami tentang proyek yang menggunakan Soot , baik secara komersial maupun dalam bentuk alat penelitian.
Terima kasih banyak juga karena telah mendukung Soot dengan lisensi sumber terbuka yang gratis untuk digunakan!
... untuk mendukung Pengembangan lebih lanjut dari Soot! Amazon Web Services adalah Sponsor Emas.
Baca lebih lanjut di sini tentang cara menjadi sponsor Anda sendiri.
Cobalah dan terlibat dalam pengembangan Java 9 terbaru dari Soot.
ModuleScene
SootSoot adalah kerangka optimasi Java. Ini menyediakan empat representasi perantara untuk menganalisis dan mengubah bytecode Java:
Lihat https://soot-oss.github.io/soot untuk detailnya.
Kami memiliki beberapa dokumentasi tentang Jelaga di wiki dan juga sejumlah besar tutorial tentang Jelaga.
Untuk informasi lebih rinci silakan pertimbangkan juga Dokumentasi JavaDoc dan Opsi Soot.
Rilis Soot saat ini dibuat untuk setiap komit ke cabang master
. Anda dapat memasukkan Soot sebagai ketergantungan melalui Maven, Gradle, SBT, dll menggunakan koordinat berikut:
< dependencies >
< dependency >
< groupId >org.soot-oss</ groupId >
< artifactId >soot</ artifactId >
< version >4.3.0</ version >
</ dependency >
</ dependencies >
Anda juga bisa mendapatkan versi lama dari cabang master
. Daftar lengkap bangunan dapat ditemukan di Maven Central.
SNAPSHOT Jelaga saat ini dibuat untuk setiap komitmen pada cabang develop
. Anda dapat memasukkan Soot sebagai ketergantungan melalui Maven, Gradle, SBT, dll menggunakan koordinat berikut:
< dependencies >
< dependency >
< groupId >org.soot-oss</ groupId >
< artifactId >soot</ artifactId >
< version >4.4.0-SNAPSHOT</ version >
</ dependency >
</ dependencies >
< repositories >
< repository >
< id >sonatype-snapshots</ id >
< url >https://oss.sonatype.org/content/repositories/snapshots</ url >
< releases >
< enabled >false</ enabled >
</ releases >
</ repository >
</ repositories >
Anda juga bisa mendapatkan versi lama dari cabang develop
. Daftar lengkap bangunan dapat ditemukan di Maven Central.
Kami merekomendasikan penggunaan Soot dengan Maven. Anda bisa mendapatkan rilis terbaru dari Soot secara langsung. Build SNAPSHOT terbaru dari Soot bisa kamu dapatkan secara langsung.
File soot-<RELEASE>-jar-with-dependencies.jar
adalah file lengkap yang juga berisi semua perpustakaan yang diperlukan.
File soot-<RELEASE>.jar
hanya berisi Jelaga, memungkinkan Anda memilih dependensi secara manual sesuai kebutuhan. Jika Anda tidak ingin repot dengan ketergantungan, sebaiknya gunakan yang pertama.
Jika Anda tidak dapat bekerja dengan versi prebuild dan perlu membuat Soot sendiri, harap pertimbangkan wiki untuk langkah lebih lanjut.
Jelaga mengikuti konvensi git-flow. Rilis dan perbaikan terbaru disimpan di cabang master. Pengembangan terjadi di cabang pengembangan. Untuk mengetahui keunggulan Jelaga, lihat yang terakhir.
Kami dengan senang hati menerima perbaikan sewenang-wenang pada Soot dalam bentuk permintaan penarikan GitHub. Harap baca pedoman kontribusi kami sebelum menyiapkan permintaan penarikan.
Anda menggunakan Soot dan ingin membantu kami mendukungnya di masa mendatang? Maka mohon dukung kami dengan mengisi formulir web kecil ini.
Dengan begitu Anda dapat membantu kami dengan dua cara:
Jika Anda ingin menjalankan Soot dengan Java > 8, Anda sudah selesai. Jalankan saja seperti biasa. Jika Anda ingin menjalankan Soot dengan Java 8 tetapi menganalisis Proyek Java >8 atau sebaliknya, lihat di bawah.
Untuk memuat modul di ModuleScene
Soot dari java:
// configure Soot's options, refer to example configurations below
Options . v (). set_soot_modulepath ( modulePath );
// load classes from modules into Soot
// Here, getClassUnderModulePath() expects the module path to be set using the Options class as seen above
Map < String , List < String >> map = ModulePathSourceLocator . v (). getClassUnderModulePath ( modulePath );
for ( String module : map . keySet ()) {
for ( String klass : map . get ( module )) {
logger . info ( "Loaded Class: " + klass + " n " );
loadClass ( klass , false , module );
// the loadClass() method is defined below
}
}
//this must be called after all classes are loaded
Scene . v (). loadNecessaryClasses ();
public static SootClass loadClass ( String name , boolean main , String module ) {
SootClass c = ModuleScene . v (). loadClassAndSupport ( name , Optional . of ( module ));
c . setApplicationClass ();
if ( main )
Scene . v (). setMainClass ( c );
return c ;
}
ModuleUtil.module_mode() membantu Anda memeriksa apakah Anda memiliki modul yang diaktifkan di Soot. Hal ini dilakukan berdasarkan apakah jalur modul diatur menggunakan kelas Opsi.
if ( java < 9 ) { // when you have a target benchmark with Java < 9 and hence no modules
Options . v (). set_prepend_classpath ( true );
Options . v (). set_process_dir ( Arrays . asList ( applicationClassPath (). split ( File . pathSeparator )));
Options . v (). set_soot_classpath ( sootClassPath ());
}
if ( java >= 9 && USE_CLASSPATH ) { // when you have a target benchmark with Java >= 9 and do not want module support
Options . v (). set_soot_classpath ( "VIRTUAL_FS_FOR_JDK" + File . pathSeparator + sootClassPath ());
Options . v (). set_process_dir ( Arrays . asList ( applicationClassPath (). split ( File . pathSeparator )));
}
if ( java >= 9 && USE_MODULEPATH ) { // when you have a target benchmark with Java >= 9 and want module support
Options . v (). set_prepend_classpath ( true );
Options . v (). set_soot_modulepath ( sootClassPath ());
Options . v (). set_process_dir ( Arrays . asList ( applicationClassPath (). split ( File . pathSeparator )));
}
Dalam contoh di atas, applicationClassPath() harus diganti dengan jalur ke kelas aplikasi untuk dianalisis oleh Soot dan sootClassPath() harus diganti dengan classpath Soot.
Untuk mengeksekusi Soot menggunakan Java 1.9, tetapi menganalisis jalannya classpath, sama seperti sebelumnya: java -cp soot-trunk.jar soot.Main --process-dir directoryToAnalyse
jika Anda ingin menentukan classpath secara eksplisit jalankan: java -cp soot-trunk.jar soot.Main -cp VIRTUAL_FS_FOR_JDK --process-dir directoryToAnalyse
nilai VIRTUAL_FS_FOR_JDK
menunjukkan bahwa Soot juga harus mencari sistem file virtual Java (>9) jrt:/
untuk kelas, meskipun Soot tidak dijalankan dalam mode modul.
Untuk memuat modul dan kelas di Soot menggunakan Java 1.8, jalankan:
java -cp PATH_TO_JAVA9/jrt-fs.jar:soot-trunk.jar soot.Main -pp -soot-modulepath modules/
Harap ganti PATH_TO_JAVA9
dengan jalur ke instalasi lokal Java 9. jrt-fs.jar
adalah penyedia Sistem File NIO bawaan untuk penggunaan sistem file jrt:// java 9 yang menggantikan rt.jar
.