Scalpel هو إطار تحليل الثعبان الثابت. ويوفر وظائف تحليل البرنامج الأساسية لتسهيل تنفيذ تطبيقات العميل التي تركز على حل المشكلات المخصصة بشكل ثابت.
تثبيت scalpel باستخدام PIP مع الأمر التالي
pip install python-scalpelسوف نقدر ذلك بشدة إذا كنت تستطيع المساهمة في هذا المشروع. لا تتردد في القيام بذلك عن طريق تقديم تقارير المشكلات أو إضافة طلبات السحب مباشرة. نأمل الحصول على مساعدة لـ:
يمكن العثور على أدلة المستخدم التفصيلية في Python-scalpel.readthedocs.io.
نحن نهدف إلى تزويد Scalpel كإطار تحليل ثابت للبيثون الثابت الذي يتضمن أكبر عدد ممكن من الوظائف (على سبيل المثال ، لإنشاء رسم بياني للتدفق بين الوظائف بسهولة ، لتفسير علاقة الاستيراد لوحدات بيثون المختلفة ، وما إلى ذلك) نحو تسهيل المطورين لتنفيذ محللهم الثابت الذي يركز على المشكلات. الرقم التالي يصور الهندسة المعمارية الحالية لتصميمها.

تتوفر وثائق API الخاصة بـ Scalpel في Python-scalpel.readthedocs.io.
نصدر رمز المصدر Scalpel على أمل الاستفادة من الآخرين. يُطلب منك بلطف الاعتراف باستخدام الأداة من خلال الإشارة إلى المقالة التالية:
@article{li2022scalpel,
title={Scalpel: The Python Static Analysis Framework},
author={Li, Li and Wang, Jiawei and Quan, Haowei},
journal={arXiv preprint arXiv:2202.11840},
year={2022}
}
تتم دعوة Scalpel لتقديمها في Europython 2022. Europython هو أقدم وأطول مؤتمر لبرمجة Python بقيادة المتطوعين على هذا الكوكب!

وقد استلهم هذا المشروع من العديد من الأعمال الحالية. إذا كنت تعتقد أن عملك يظهر في هذا المشروع ولكن لم يتم ذكره بعد ، فيرجى إخبارنا بأي وسيلة.
الوظيفة 1: رمز Rewriter. تم تصميم وحدة إعادة كتابة التعليمات البرمجية كدالة أساسية لدعم التغييرات المنهجية في برامج Python الحالية. هناك استخدامان أوليان لهذه الوظيفة هو (1) تبسيط البرامج لتحليل ثابت أفضل و (2) تحسين أو إصلاح البرامج الإشكالية. لدعم الاستخدام الأول ، ندمج في الإطار قاعدة بيانات بما في ذلك مجموعة من القواعد التي تشير إلى كيفية تحويل مقتطفات التعليمات البرمجية المتطابقة. يجب توسيع قاعدة البيانات هذه باستمرار لتلبية متطلبات التبسيط المعقدة لتحقيق تحليل ثابت فعال لبرامج Python. لدعم الاستخدام الثاني ، المستوحى من آلية التحسين التي يوفرها SOOT (واحدة من أشهر أطر تحليل برنامج Java الثابتة) ، قمنا أيضًا بإعداد عملية تحويل مع طرق رد اتصال مخصصة لإعادة كتابتها من قبل المستخدمين لتحسين رمز Python بناءً على احتياجاتهم المخصصة.
الوظيفة 2: بناء الرسم البياني للتدفق. تقوم وحدة بناء الرسم البياني للتدفق (CFG) بإنشاء CFGs داخل المباريات ، والتي تعد مكونًا أساسيًا في تحليل التدفق الثابت مع تطبيقات مثل تحسين البرنامج وتحليل taint. يمثل CFG جميع المسارات التي قد يتم اجتيازها من خلال برنامج أثناء تنفيذها. يمكن دمج CFGs لمشروع Python مع الرسم البياني للمكالمات لإنشاء CFG بين المبررات للمشروع.
الوظيفة 3: تمثيل التخصيص الفردي الثابت (SSA). توفر وحدة التعيين الفردية الثابتة تمثيلات وسيطة على مستوى المترجم (IR) لتحليل الكود. لا يمكن استخدامه فقط للتنفيذ الرمزي ولكن أيضًا للانتشار المستمر. من خلال إعادة تسمية كل مهمة متغيرة بأسماء مختلفة ، يمكننا الحصول على سلاسل استخدام صريحة للاستخدام ، وبالتالي تتبع بالضبط كيفية تدفق البيانات في البرنامج.
الوظيفة 4: تحليل الاسم المستعار. نظرًا لأن المتغيرات يمكن أن تشير إلى نفس موقع الذاكرة أو القيم المتطابقة ، فقد تم تصميم وظيفة تحليل الاسم المستعار لنمذجة مثل هذه الاستخدامات. يمكن أن تكون هذه الوظيفة أمرًا حيويًا للانتشار المستمر. بالإضافة إلى ذلك ، سيستفيد تحليل الاسم المستعار أيضًا من التحقق من نوع API.
الوظيفة 5: انتشار مستمر. ستقوم وحدة الانتشار الثابتة بتقييم القيم الفعلية للمتغيرات في بعض نقاط البرنامج في مسارات تنفيذ مختلفة قبل وقت التشغيل. مع القيم الفعلية المعروفة مسبقًا ، يمكننا تحسين الكود واكتشاف الأخطاء. سيستخدم الانتشار المستمر التمثيل من وحدة SSA للحفاظ على تسجيل القيم من كل مهمة لمتغير واحد.
الوظيفة 6: استيراد بناء الرسم البياني. في Python ، تمت الإشارة إلى تدفقات الاستيراد والعلاقات على أنها مهمة لرسم خرائط API ، وتحليل التبعية. يهدف بناء الرسم البياني للاستيراد الخاص بنا إلى توفير بنية بيانات لتمثيل علاقات الاستيراد هذه عبر ملفات وحدة Python في نفس المشروع. يمكن دمج الرسوم البيانية للاستيراد لمشاريع Python المتعددة لإجراء تحليل تدفق البيانات بين المكتبات.
الوظيفة 7: الاسم المؤهل بالكامل الاستدلال. يمكن استدعاء واجهات برمجة تطبيقات Python أو أسماء الوظائف بطرق مختلفة اعتمادًا على كيفية استيرادها. ومع ذلك ، فإن هذا يؤدي إلى إزعاج لتحليل استخدام API. في هذه الوحدة ، سنقوم بتحويل جميع أسماء مكالمات الوظائف إلى أسمائها المؤهلة بالكامل والتي هي سلاسل منقطة يمكن أن تمثل المسار من الوحدة النمطية ذات المستوى الأعلى إلى الكائن نفسه. يمكن الاستفادة من المهام المختلفة من هذه الوظيفة مثل فهم استخدام واجهة برمجة التطبيقات المستهلكة ، وتوصيل التبعية وكذلك بناء الرسوم البيانية للمكالمات الصوتية.
الوظيفة 8: استدعاء إنشاء الرسم البياني. يصور الرسم البياني للمكالمات علاقات الاتصال بين الأساليب في برنامج ما. إنه مكون أساسي في تحليل التدفق الثابت ويمكن الاستفادة منه في مهام مثل التنميط ، انتشار الضعف ، وإعادة البناء. تعالج هذه الوحدة التحديات التي تلفها الميزات المعقدة المعتمدة في بيثون ، مثل وظائف الترتيب العالي وتعريفات الوظائف المتداخلة ، لإنشاء الرسوم البيانية للمكالمات الدقيقة لمشاريع بيثون المعطاة.
الوظيفة 9: اكتب الاستدلال. يواجه بيثون ، كلغة مطبوعة ديناميكيًا ، مشكلة من الصعب استخدام القوة الكاملة للتحليل الثابت التقليدي. تقوم هذه الوحدة بإصدار معلومات النوع لجميع المتغيرات بما في ذلك قيم إرجاع الوظيفة ومعلمات الوظائف في برنامج Python ، مما يجعل تحليلًا ثابتًا أكثر تطوراً للبيثون. نستخدم تحليل تدفق البيانات المتخلف ومجموعة من القواعد الإرشادية لتحقيق دقة عالية.