Maple-IR เป็นกรอบการวิเคราะห์แบบคงที่จากอุตสาหกรรม IR สำหรับ Java bytecode ปัจจุบันมันใช้การวิเคราะห์ตามรูปแบบ SSA รวมถึงการก่อสร้างและการทำลายล้างจาก bytecode ไปยัง IR Toolchain ใช้อินพุต bytecode ยกไปยัง SSA IR แปลง IR จากนั้นทำการคอมไพล์อีกครั้งกลับไปที่ bytecode สิ่งนี้ทำโดยการดำเนินการตามสัญลักษณ์แต่ละวิธีในขณะที่จำลองสแต็กคล้ายกับวิธีการที่ Binary Ninja หรือ HEX-rays ของ IDA Pro ทำงาน การวิเคราะห์การไหลของข้อมูล Intraprocedural ถูกนำมาใช้อย่างเต็มที่และการปรับให้เหมาะสมเช่นการพับเก็บอย่างต่อเนื่องและการคัดลอกข้อเสนอก็ถูกนำมาใช้เช่นกัน นอกจากนี้ยังมีผู้ส่งออก CFG GraphViz ดูตัวอย่างด้านล่าง
Maple-IR ไม่ได้อยู่ในการพัฒนาที่ใช้งานอยู่ มันอยู่ในช่องว่างอย่างไม่มีกำหนดแม้ว่าการบริจาครหัสจะได้รับการต้อนรับ โปรดยื่นคำถามความคิดเห็นและปัญหาเกี่ยวกับการติดตามปัญหา
Maple-IR ในรูปแบบปัจจุบันยังไม่พร้อมการผลิตแม้ว่าจะสามารถทำได้ด้วยความพยายามเพียงเล็กน้อย
หากคุณใช้ Maple-IR โปรดแจ้งให้เราทราบ! เราชอบที่จะได้ยินเกี่ยวกับโครงการเจ๋ง ๆ ที่คุณใช้

"มันเหมือน LLVM แต่แย่กว่านั้น"
นี่คือการสร้างภาพ GraphViz สำหรับ IR ที่ได้รับการปรับปรุง (โพสต์ SSA) ที่ดีที่สุดสำหรับรหัสต่อไปนี้:
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 );
}
นี่คือฟังก์ชั่นที่น่ารังเกียจในรูปแบบ SSA ที่ได้รับการปรับให้เหมาะสมซึ่งนำมาจาก decompiler fernflower:
การทำลาย SSA ถูกนำมาใช้โดยใช้วิธีการของ Sreedhar และคณะ และ Boissinot et al .. Destructor Boissinot เป็นผู้ทำลายเริ่มต้น SSA Construction ดำเนินการตามอัลกอริทึมการสแกนเชิงเส้น 1-pass ที่รวดเร็วขึ้นอยู่กับวิธีการของ Cytron et al. โดยใช้เขตแดนการปกครอง สำหรับรายละเอียดเพิ่มเติมโปรดดู ssagenpass.java Bytecode Destruction เป็นเรื่องยุ่งยากใน Java เนื่องจากมีข้อยกเว้น นอกจากนี้การทำให้เป็นเส้นตรงกราฟการไหลของการควบคุม (CFG) ในลักษณะที่เรียบง่ายเป็นเรื่องยากเนื่องจากการทำรังลูป การจัดการเชิงเส้นได้รับการจัดการโดยการใช้อัลกอริทึมส่วนประกอบที่เชื่อมต่อแบบ superconnection ของ Tarjan ตารางข้อยกเว้นสำหรับแต่ละวิธีจะถูกยกเลิกและสร้างใหม่ตามโครงสร้างกราฟการควบคุมของกราฟ สำหรับรายละเอียดเพิ่มเติมดูที่ ControlFlowGraphdumper
สำหรับรายละเอียดเพิ่มเติมดูที่กระดาษสีขาว
javac ตัวอย่างเช่นซึ่งหมายความว่า finally บล็อกจะถูกประมวลผลอย่างถูกต้องแม้ว่าจะไม่เรียบร้อย เพื่อสร้าง:
mvn clean compile test package
การสร้างจะผลิตสองขวดหนึ่งที่มีการพึ่งพารวม ( mapleir-full.jar ) และอีกหนึ่งไม่มี ( mapleir-full-with-deps.jar ) คุณยังสามารถใช้แต่ละโมดูลทีละโมเลกุล
จากนั้นทางเลือก:
mvn install
นอกจากนี้คุณยังสามารถรับ Maple-IR บน Jitpack ได้
ติดต่อ: โปรดยื่นปัญหาฉันจะพยายามอย่างเต็มที่เพื่อตอบกลับโดยเร็วที่สุด
การแบ่งปันจะนำไปสู่การรายงานและเอาชนะ (Bless)
Maple-IR ได้รับใบอนุญาตภายใต้ GPLV3 สำหรับข้อมูลเพิ่มเติมโปรดดูที่นี่
ลิขสิทธิ์ (c) 2022 BIBL และ RCX