ในเดือนธันวาคม 2022 เราได้เปิดตัว SootUp อย่างเป็นทางการ ซึ่งเป็นเวอร์ชันของ Soot ที่มีสถาปัตยกรรมที่ได้รับการปรับปรุงใหม่ทั้งหมด มีโมดูลาร์มากขึ้น ทดสอบได้ บำรุงรักษาได้ และใช้งานได้ โปรดตรวจสอบสิ่งนี้ในกรณีที่คุณต้องการเริ่มโครงการวิเคราะห์โปรแกรมใหม่
เนื่องจากมีความสับสน: SootUp ยังไม่เสร็จสมบูรณ์ ดังนั้น Soot "เก่า" จึงต้องคงอยู่ต่อไปในขณะนี้ โดยเฉพาะสำหรับโครงการที่ต้องใช้ความสามารถในการใช้เครื่องมือหรือการสนับสนุน Android ที่แข็งแกร่ง เขม่า "เก่า" ยังคงได้รับการบำรุงรักษาจนกว่าจะสามารถดรอปได้อย่างปลอดภัยสำหรับผู้สืบทอดที่มีคุณสมบัติครบถ้วน
เราสมัครขอรับเงินทุนเป็นประจำเพื่อช่วยเรารักษาเขม่า คุณสามารถช่วยเราได้อย่างมากโดยแจ้งให้เราทราบเกี่ยวกับ โครงการที่ใช้ Soot ทั้งในเชิงพาณิชย์หรือในรูปแบบของเครื่องมือวิจัย
ขอบคุณมากสำหรับการสนับสนุน Soot ด้วยใบอนุญาตโอเพ่นซอร์สที่ใช้งานฟรี!
...เพื่อสนับสนุนการพัฒนา Soot! Amazon Web Services เป็นผู้สนับสนุนระดับโกลด์
อ่านเพิ่มเติมที่นี่เกี่ยวกับวิธีการเป็นผู้สนับสนุนด้วยตัวคุณเอง
ลองและมีส่วนร่วมในการพัฒนา Bleeding Edge ของ Java 9 ของ Soot
ModuleScene
ของ SootSoot เป็นเฟรมเวิร์กการปรับให้เหมาะสมของ Java โดยให้การแสดงระดับกลางสี่รายการสำหรับการวิเคราะห์และการแปลงรหัสไบต์ Java:
ดู https://soot-oss.github.io/soot สำหรับรายละเอียด
เรามีเอกสารบางส่วนเกี่ยวกับ Soot ในวิกิ และยังมีบทช่วยสอนมากมายเกี่ยวกับ Soot
สำหรับข้อมูลโดยละเอียด โปรดพิจารณาเอกสารประกอบ JavaDoc และตัวเลือกของ Soot
ขณะนี้ Soot release ถูกสร้างขึ้นสำหรับแต่ละคอมมิตไปยังสาขา 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 รุ่นล่าสุดได้โดยตรง คุณสามารถรับ Soot รุ่นล่าสุดของ SNAPSHOT ได้โดยตรง
ไฟล์ soot-<RELEASE>-jar-with-dependencies.jar
เป็นไฟล์ all-in-one ที่ยังมีไลบรารีที่จำเป็นทั้งหมดด้วย
ไฟล์ soot-<RELEASE>.jar
มีเพียง Soot เท่านั้น ซึ่งช่วยให้คุณสามารถเลือกการขึ้นต่อกันได้ตามที่คุณต้องการ หากคุณไม่ต้องการกังวลกับการขึ้นต่อกัน เราขอแนะนำให้ใช้อันแรก
หากคุณไม่สามารถทำงานกับเวอร์ชันที่สร้างไว้ล่วงหน้าได้และจำเป็นต้องสร้าง Soot ด้วยตัวเอง โปรดพิจารณาขั้นตอนเพิ่มเติมในวิกิ
Soot เป็นไปตามแบบแผน git-flow รุ่นและโปรแกรมแก้ไขด่วนจะคงอยู่ในสาขาหลัก การพัฒนาเกิดขึ้นในสาขาพัฒนา หากต้องการจับขอบเลือดออกของเขม่าให้ตรวจสอบอย่างหลัง
เรายินดีที่จะยอมรับการปรับปรุง Soot โดยพลการในรูปแบบของคำขอดึง GitHub โปรดอ่านหลักเกณฑ์การสนับสนุนของเราก่อนที่จะตั้งค่าคำขอดึง
คุณกำลังใช้ Soot และต้องการช่วยเราสนับสนุนมันในอนาคตหรือไม่? โปรดสนับสนุนเราด้วยการกรอกแบบฟอร์มบนเว็บเล็กๆ นี้
ด้วยวิธีนี้คุณสามารถช่วยเราได้สองวิธี:
หากคุณต้องการรัน Soot ด้วย Java > 8 แสดงว่าคุณทำเสร็จแล้ว เพียงแค่เรียกใช้ตามปกติ หากคุณต้องการดำเนินการ Soot ด้วย Java 8 แต่วิเคราะห์ Java >8 Projects หรือในทางกลับกัน ดูด้านล่าง
วิธีโหลดโมดูลใน ModuleScene
ของ Soot จาก 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 แต่วิเคราะห์การรัน classpath เหมือนเมื่อก่อน: java -cp soot-trunk.jar soot.Main --process-dir directoryToAnalyse
หากคุณต้องการระบุ classpath ให้รันอย่างชัดเจน: 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 FileSystem ในตัวสำหรับระบบไฟล์ jrt:// java 9 ที่ใช้แทนที่ rt.jar