️ [وثائق روبتا] قيد التطوير.
يدعم هذا الإطار المفتوح المصدر ، Rupta ، تحليل المؤشر/الاسم المستعار للصدأ ، ويعمل على Rust MIR. ويوفر حاليًا تحليل المؤشر القائم على المكالمات ، كما هو مفصل في ورقة CC'24 الخاصة بنا (https://dl.acm.org/doi/10.1145/3640537.3641574).
استنساخ المستودع
بناء وتثبيت
يمكنك بناء روبتا بطريقتين مختلفتين:
$ cargo build يولد هذا الأمر ثنائيات ، cargo-pta و pta ، في دليل target/debug .
يمكنك أيضًا تثبيت Rupta في cargo :
$ cargo --locked install --path . يمكّنك ذلك من إجراء تحليل المؤشر على مشروع الصدأ باستخدام Command cargo pta ، على غرار أوامر cargo الأخرى مثل cargo fmt .
يمكنك تشغيل Rupta لمشروع الصدأ باستخدام cargo-pta الثنائية:
$ cargo-pta pta -- --entry < entry-function-name > --pta-type < pta-type > --context-depth < N > --dump-call-graph < call-graph-path > --dump-pts < pts-path > يمكنك أيضًا استخدام Command cargo pta بدلاً من cargo-pta pta إذا تم تثبيت RUPTA في cargo .
بدلاً من ذلك ، يمكنك تشغيل Rupta لملف واحد باستخدام pta الثنائي:
$ pta < path-to-file > --entry-func < entry-function-name > --pta-type < pta-type > --context-depth < N > --dump-call-graph < call-graph-path > --dump-pts < pts-path >خيارات:
<entry-function-name> : يحدد وظيفة الإدخال. الافتراضي هو main() .<pta-type> : يحدد نوع تحليل المؤشر. الخيارات هي cs (حساسة للاتصالات) أو ander (Andersen) ، مع cs كما الافتراضي.context-depth : يحدد عمق السياقات في التحليل الحساس للمكالمات. الافتراضي هو 1.dump-call-graph : يخرج الرسم البياني للمكالمات بتنسيق DOT.dump-pts : يخرج نتائج التحليل النقاط.dump-mir : يخرج MIR لجميع الوظائف التي يمكن الوصول إليها.ملاحظة: تتطلب RUPTA موارد حسابي وذاكرة كبيرة لتحليل مشاريع الصدأ الكبيرة. إذا واجهت أوقات تحليل طويلة بشكل مفرط - غالبًا بسبب العديد من الوظائف التي يمكن الوصول إليها من MAIN () أثناء التحليل - تستهلك ترقية إلى منصة حوسبة أكثر قوة مزودة بذاكرة إضافية (على سبيل المثال ، 128 جيجابايت) ووحدات المعالجة المركزية الأسرع.
اضبط متغير بيئة PTA_LOG لتمكين التسجيل:
$ export PTA_LOG=info إذا واجهت أخطاء تحميل المكتبات المشتركة ، مثل librustc_driver.so ، حاول الإعداد:
$ export LD_LIBRARY_PATH= $( rustc --print sysroot ) /lib: $LD_LIBRARY_PATH انظر الترخيص
لقد أصدرنا رمز مصدر Rupta لدعم مجتمع الأبحاث الأوسع وتسهيل التطورات في هذا المجال. نأمل أن تكون ذات قيمة لمشاريعك. يرجى الفضل في مساهمتنا من خلال الاستشهاد بالورقة التالية في أي منشورات أو عروض تقديمية تستخدم أدوينا:
@inproceedings{li2024context,
title={A Context-Sensitive Pointer Analysis Framework for Rust and Its Application to Call Graph Construction},
author={Li, Wei and He, Dongjie and Gui, Yujiang and Chen, Wenguang and Xue, Jingling},
booktitle={Proceedings of the 33rd ACM SIGPLAN International Conference on Compiler Construction},
pages={60--72},
year={2024},
publisher={ACM},
doi = {10.1145/3640537.3641574}
}
أي تعليقات ومساهمات وتعاون مرحب بها. يرجى الاتصال بالمؤلفين Wei li أو Jingling Xue إذا كان لديك أي أسئلة.