في ديسمبر 2022، أطلقنا رسميًا SootUp، وهو إصدار من Soot ذو بنية تم إصلاحها بالكامل وأكثر معيارية وقابلة للاختبار والصيانة والاستخدام. يرجى التحقق من ذلك في حالة رغبتك في بدء مشروع جديد لتحليل البرنامج.
نظرًا لوجود بعض الالتباس: لم تكتمل ميزات SootUp بعد. لذلك، يجب أن يستمر Soot "القديم" في الوقت الحالي، خاصة بالنسبة للمشاريع التي تتطلب إمكانات الأجهزة أو دعمًا قويًا لنظام Android. لا يزال Soot "القديم" قيد الصيانة حتى يمكن إسقاطه بأمان للحصول على خليفة مكتمل الميزات.
نحن نتقدم بانتظام للحصول على تمويل لمساعدتنا في الحفاظ على السخام. يمكنك مساعدتنا بشكل كبير من خلال إعلامنا بالمشاريع التي تستخدم Soot ، سواء تجاريًا أو في شكل أدوات بحث.
شكرًا جزيلًا أيضًا لدعم Soot بترخيص مفتوح المصدر مجاني للاستخدام!
... لدعم التطوير الإضافي لـ Soot! Amazon Web Services هي الراعي الذهبي.
اقرأ المزيد هنا حول كيفية أن تصبح راعيًا بنفسك.
حاول المشاركة في تطوير Soot's Java 9 المتطورة.
ModuleScene
الخاص بـ SootSoot هو إطار عمل لتحسين Java. يوفر أربعة تمثيلات وسيطة لتحليل وتحويل Java bytecode:
راجع https://soot-oss.github.io/soot للحصول على التفاصيل.
لدينا بعض الوثائق حول Soot في الويكي وأيضًا مجموعة كبيرة من البرامج التعليمية حول Soot.
للحصول على معلومات مفصلة، يرجى أيضًا الاطلاع على وثائق JavaDoc والخيارات الخاصة بـ Soot.
تم إنشاء إصدار Soot حاليًا لكل التزام بالفرع master
. يمكنك تضمين Soot باعتباره تبعية عبر Maven، وGradle، وSBT، وما إلى ذلك باستخدام الإحداثيات التالية:
< dependencies >
< dependency >
< groupId >org.soot-oss</ groupId >
< artifactId >soot</ artifactId >
< version >4.3.0</ version >
</ dependency >
</ dependencies >
يمكنك أيضًا الحصول على الإصدارات القديمة للفرع master
. يمكن العثور على قائمة كاملة بالبنيات على Maven Central.
تم حاليًا إنشاء Soot SNAPSHOT لكل التزام بفرع develop
. يمكنك تضمين Soot باعتباره تبعية عبر Maven، وGradle، وSBT، وما إلى ذلك باستخدام الإحداثيات التالية:
< 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 >
يمكنك أيضًا الحصول على الإصدارات الأقدم لفرع develop
. يمكن العثور على قائمة كاملة بالبنيات على Maven Central.
نوصي باستخدام Soot مع Maven. يمكنك الحصول على أحدث إصدار من Soot مباشرة. يمكنك الحصول على أحدث إصدار SNAPSHOT من Soot مباشرةً.
الملف soot-<RELEASE>-jar-with-dependencies.jar
هو ملف شامل يحتوي أيضًا على كافة المكتبات المطلوبة.
يحتوي الملف soot-<RELEASE>.jar
على Soot فقط، مما يسمح لك باختيار التبعيات يدويًا حسب حاجتك إليها. إذا كنت لا تريد أن تهتم بالتبعيات، فنوصي باستخدام الأول.
إذا لم تتمكن من العمل مع إصدارات ما قبل البناء وتحتاج إلى إنشاء Soot بنفسك، يرجى النظر في wiki لمزيد من الخطوات.
يتبع Soot اتفاقية git-flow. يتم الاحتفاظ بالإصدارات والإصلاحات العاجلة في الفرع الرئيسي. التطوير يحدث في فرع التطوير. للقبض على حافة السخام النازفة، تحقق من الأخير.
يسعدنا قبول التحسينات التعسفية على Soot في شكل طلبات سحب GitHub. يرجى قراءة إرشادات المساهمة الخاصة بنا قبل إعداد طلب السحب.
هل تستخدم Soot وترغب في مساعدتنا في دعمه في المستقبل؟ ثم يرجى دعمنا عن طريق ملء نموذج الويب الصغير هذا.
وبهذه الطريقة يمكنك مساعدتنا بطريقتين:
إذا كنت تريد تشغيل Soot باستخدام Java > 8، فقد انتهيت. فقط قم بتشغيله كالمعتاد. إذا كنت تريد تنفيذ Soot باستخدام Java 8 مع تحليل Java >8 Projects أو العكس، فانظر أدناه.
لتحميل الوحدات النمطية في Soot's ModuleScene
من 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() على التحقق مما إذا كان لديك وحدات نمطية ممكّنة في Soot. يتم ذلك بناءً على ما إذا كان مسار الوحدة قد تم تعيينه باستخدام فئة الخيارات.
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 )));
}
في الأمثلة المذكورة أعلاه، يجب استبدال applicationClassPath() بالمسار إلى فئات التطبيق للتحليل بواسطة Soot ويجب استبدال sootClassPath() بمسار Soot classpath.
لتنفيذ Soot باستخدام Java 1.9، ولكن مع تحليل تشغيل مسار الفصل، تمامًا كما كان من قبل: java -cp soot-trunk.jar soot.Main --process-dir directoryToAnalyse
إذا كنت تريد تحديد مسار الفصل بشكل صريح، قم بتشغيل: java -cp soot-trunk.jar soot.Main -cp VIRTUAL_FS_FOR_JDK --process-dir directoryToAnalyse
تشير القيمة VIRTUAL_FS_FOR_JDK
إلى أن Soot يجب أن يبحث في نظام الملفات الافتراضي Java (>9) jrt:/
عن الفئات أيضًا، على الرغم من عدم تنفيذ Soot في وضع الوحدة النمطية.
لتحميل الوحدات والفئات في Soot باستخدام Java 1.8، قم بتشغيل:
java -cp PATH_TO_JAVA9/jrt-fs.jar:soot-trunk.jar soot.Main -pp -soot-modulepath modules/
الرجاء استبدال PATH_TO_JAVA9
بالمسار إلى التثبيت المحلي لـ java 9. jrt-fs.jar
هو موفر نظام ملفات NIO مدمج يستخدمه نظام الملفات jrt:// java 9 الذي يحل محل rt.jar
.