Maple-IR هو إطار تحليل ثابت قائم على الأشعة تحت الحمراء الصناعية ل Java Bytecode. حاليًا ، يقوم بتنفيذ تحليل قائم على شكل SSA بالإضافة إلى البناء والتدمير من رمز Bytecode إلى IR. يأخذ مجموعة الأدوات إدخال Bytecode ، ورفعها إلى SSA IR ، وتحول الأشعة تحت الحمراء ، ثم يعيد ترجمة العودة إلى Bytecode. يتم ذلك عن طريق تنفيذ كل طريقة رمزيًا أثناء محاكاة المكدس ، على غرار كيفية عمل Rays Binary Ninja أو Ida Pro. يتم تنفيذ تحليل تدفق البيانات داخل المعالجة بالكامل ، ويتم تنفيذ التحسينات مثل الطي المستمر و Propogation أيضًا. مصدر CFG GraphViz متاح أيضًا ؛ انظر أدناه للحصول على أمثلة.
القيقب-IR ليس في التطوير النشط. إنه على توقف غير مسمى إلى أجل غير مسمى ، على الرغم من ترحيب مساهمات الكود. يرجى تقديم الأسئلة والتعليقات والمشكلات على تعقب القضية.
القيقب-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 et al. و Boissinot et al .. The Boissinot Destructor هو حاليًا المدمر الافتراضي. يتم تنفيذ بناء SSA استنادًا إلى خوارزمية مسح خطي سريع للتمرير واحد بشكل فضفاض بناءً على طريقة Cytron et al. باستخدام حدود الهيمنة. لمزيد من التفاصيل ، انظر ssagenpass.java. تدمير Bytecode صعب في Java بسبب نطاقات الاستثناء. علاوة على ذلك ، فإن تخطي الرسم البياني لتدفق التحكم (CFG) بطريقة بسيطة أمر صعب بسبب تعشيش الحلقة. يتم التعامل مع الخطية عن طريق تطبيق خوارزمية مكونات Tarjan الفائقة المتصل. يتم التخلص من جداول الاستثناءات لكل طريقة وتجديدها بناءً على بنية رسم تخفيف التحكم. لمزيد من التفاصيل ، راجع ControlFlowGraphdumper.
لمزيد من التفاصيل ، راجع الورقة البيضاء.
javac في الاعتبار. هذا يعني ، على سبيل المثال ، تتم معالجة الكتل finally بشكل صحيح ، وإن لم تكن بدقة. للبناء:
mvn clean compile test package
سوف ينتج البناء اثنين من الجرار ، واحدة مع تبعيات المدرجة ( mapleir-full.jar ) ، وواحد بدون ( mapleir-full-with-deps.jar ). يمكنك أيضًا استخدام كل وحدة على حدة.
ثم ، اختياريا:
mvn install
يمكنك أيضًا الحصول على القيقب على jitpack.
جهة الاتصال: يرجى تقديم مشكلة ، وسأبذل قصارى جهدي للرد في أسرع وقت ممكن.
سوف تؤدي المشاركة إلى الإبلاغ والضرب (يبارك)
تم ترخيص القيقب-IR بموجب GPLV3. لمزيد من المعلومات ، يرجى الاطلاع هنا.
حقوق الطبع والنشر (ج) 2022 BIBL و RCX