س : لماذا هناك حاجة إلى برنامج فك ترجمات آخر، وخاصة المعطل؟
ج : الحقيقة المحزنة هي أن معظم برامج فك الترجمات هناك معطلة. كثيرون غير قادرين على فك نصوص تافهة، والبعض الآخر لا يستطيع فك ترجمات أكثر تقدمًا، وأولئك الذين يبدو أنهم يستطيعون التعامل معها، يصابون بالشلل بسبب دعم البنيات وأنظمة التشغيل المملة فقط. وكلها تقريبًا مكتوبة بطريقة تجعل تعديلها أو إضافة بنية جديدة أمرًا معقدًا. يعد برنامج فك التحويل البرمجي أداة للهندسة العكسية، ولكن من المفارقات، إذا كنت تريد استخدام برنامج فك التحويل البرمجي النموذجي بشكل منتج أو جعله مناسبًا لاحتياجاتك، فستحتاج أولاً إلى إجراء هندسة عكسية لبرنامج فك التحويل البرمجي نفسه، وقد يستغرق ذلك شهورًا (أو سنوات) بسهولة .
الجزء المركزي من برنامج فك التحويل البرمجي (وأي إطار عمل لتحويل البرنامج) هو التمثيل المتوسط (IR). يجب أن يعمل برنامج فك التحويل البرمجي على IR، ويجب أن يأخذه كمدخل، ويجب فصل تحويل مجمع بنية معينة إلى هذا IR جيدًا عن برنامج فك التحويل البرمجي، وإلا فإن الأمر يتطلب جهدًا غير عادي لإضافة دعم لبنية أخرى (والذي بدوره يحد من قاعدة مستخدم برنامج فك التحويل البرمجي).
يعد فك الترجمة مهمة معقدة، لذا يجب أن يكون هناك فهم سهل لعملية فك الترجمة. وهذا يعني أن الأشعة تحت الحمراء التي يستخدمها برنامج فك الترجمة يجب أن تكون صديقة للإنسان، على سبيل المثال استخدام بناء جملة مألوف للمبرمجين، وتعيينه بشكل مباشر قدر الإمكان لمجمع آلة نموذجي، وما إلى ذلك.
يجب أن تكون المتطلبات المذكورة أعلاه واضحة تمامًا في حد ذاتها. إذا لم يكن الأمر كذلك، فيمكن الاستفادة من الكتب المتعلقة بهذا الموضوع، على سبيل المثال:
"يحتاج الكاتب المترجم أيضًا إلى آليات تتيح للبشر فحص برنامج IR بسهولة وبشكل مباشر. ويجب أن تضمن المصلحة الذاتية أن ينتبه الكتاب المترجمون إلى هذه النقطة الأخيرة."
(كيث كوبر، ليندا تورزون، "هندسة المترجم")
ومع ذلك، فإن مشاريع فك التشفير، بما في ذلك المشاريع مفتوحة المصدر، تنتهك هذه المتطلبات بشكل روتيني: فهي مقترنة بإحكام ببنيات آلة محددة، ولا تسمح بتغذية الأشعة تحت الحمراء، وفي كثير من الأحيان لا تعرضها أو توثقها للمستخدم على الإطلاق.
ScratchABlock هو محاولة لقول "لا" لمثل هذه الممارسات وتطوير إطار عمل فك التجميع بناءً على المتطلبات المذكورة أعلاه. لاحظ أن ScratchABlock يمكن اعتباره مشروعًا تعليميًا/بحثيًا، وبعيدًا عن النوايا الحسنة وانتقاد المشاريع الأخرى، قد لا يقدم الكثير للمستخدم العادي - حاليًا، أو ربما على الإطلاق. من المؤكد أنه يمكن انتقاده في العديد من الجوانب أيضًا.
تم إصدار ScratchABlock بموجب شروط GNU General Public License v3 (GPLv3).
تمت كتابة ScratchABlock بلغة Python3، وتم اختباره باستخدام الإصدار 3.3 والإصدارات الأحدث، على الرغم من أنه قد يعمل مع الإصدار 3.2 أو أقل أيضًا (لن يعمل مع إصدارات Python2 القديمة). هناك عدد قليل من التبعيات:
على أنظمة Debian/Ubuntu Linux، يمكن تثبيتها باستخدام sudo apt-get install python3-yaml python3-nose
. بدلًا من ذلك، يمكنك تثبيتها عبر مدير حزم pip
الخاص ببايثون (يجب أن يعمل مع أي نظام تشغيل): pip3 install -r requirements.txt
.
يستخدم ScratchABlock مجمع PseudoC باعتباره IR الخاص به. إنها لغة تجميع يتم التعبير عنها قدر الإمكان باستخدام بناء جملة لغة C المألوف. الفكرة هي أن أي مبرمج بلغة C سوف يفهمها بشكل حدسي (على سبيل المثال)، ولكن هناك جهد مستمر لتوثيق PseudoC بشكل أكثر رسمية.
لاحظ أنه بناءً على المتطلبات الموضحة في القسم السابق من المستند، وباتباع "نموذج Unix" المعروف، يقوم ScratchABlock "بشيء واحد" - وهو التحليل والتحويلات على برامج PseudoC، ولا يهتم بشكل صريح بتحويل تعليمات الآلة الخاصة ببنيات معينة إلى PseudoC (على الأقل في الوقت الحالي). وهذا يعني أن ScratchABlock لا يجبرك على استخدام أي محول/ رافع معين - يمكنك استخدام أي محول تريده. تحذير: يجب أن يكون لديك واحد لاستخدامه. انظر نهاية الوثيقة للحصول على بعض التلميحات في هذا الصدد.
كود المصدر والبرامج النصية للواجهة موجودة في جذر المستودع. وأهم البرامج النصية هي:
apply_xform.py
- برنامج تشغيل مركزي يسمح بتطبيق سلسلة من التحويلات (أو بشكل عام، برامج نصية للتحليل/التحويل عالية المستوى) على ملف واحد أو دليل من الملفات ("دليل المشروع").
inter_dataflow.py
- برنامج تشغيل تحليل تدفق البيانات (العالمي) بين الإجراءات (WIP).
script_*.py
- نصوص تحليلية/تحويلية عالية المستوى لـ apply_xform.py
( --script
Switch).
script_i_*.py
- البرامج النصية لتحليل inter_dataflow.py
.
run_tests
- عداء اختبار الانحدار. غالبية مجموعات الاختبار عالية المستوى، وتتألف من تشغيل application_xform.py مع تمريرات مختلفة على الملف (الملفات) والتحقق من النتائج المتوقعة.
الدلائل الفرعية الأخرى للمستودع:
tests_unit
- اختبارات الوحدة الكلاسيكية لوحدات بايثون، مكتوبة بلغة بايثون.
tests
- مجموعة الاختبارات الرئيسية. على الرغم من كونه تكامليًا بطبيعته، إلا أنه عادةً ما يختبر تمريرة واحدة في ملف واحد بسيط، وبالتالي يتبع فلسفة اختبار الوحدة. يتم تمثيل الاختبارات كملفات إدخال PseudoC، بينما يتم تمثيل النتائج المتوقعة - كملفات PseudoC مع تعليقات توضيحية للكتل الأساسية و(حيثما أمكن) CFG بتنسيق .dot. إن النظر إلى حالات الاختبار هذه ومحاولة تعديلها ورؤية النتيجة هي أفضل طريقة لمعرفة كيفية عمل ScratchABlock.
docs
- مجموعة متزايدة من الوثائق. على سبيل المثال، هناك مواصفات للغة المجمع PseudoC التي تعمل كممثل وسيط (IR) لـ ScratchABlock واستطلاع حول سبب عدم اختيار IR آخر موجود.
يتمثل النهج الحالي لـ ScratchABlock في تطوير مجموعة من الخوارزميات غير المقترنة نسبيًا ("التمريرات") لتحليل البرامج وتحويلها، وتغطيتها بالاختبارات، والسماح للمستخدم بالوصول إليها بسهولة. يتكون سحر إلغاء الترجمة من تطبيق هذه الخوارزميات بالترتيب الصحيح والعدد الصحيح من المرات. ومن ثم، لتحسين أداء عملية إلغاء الترجمة، تتطلب هذه التمريرات عادةً اقترانًا أكثر إحكامًا. يعد استكشاف هذه الاتجاهات هو الأولوية التالية بعد تنفيذ قائمة جرد التصاريح كما هو موضح أعلاه.
الخوارزميات والتحويلات التي ينفذها ScratchABlock:
خوارزميات الرسم البياني:
نموذج التعيين الفردي الثابت (SSA):
تحليل تدفق البيانات:
الانتشار:
إزالة الكود الميت (DCE)
إعادة الكتابة:
هيكلة تدفق التحكم:
تنسيقات الإخراج:
الأداة الشريكة لـ ScratchABlock هي ScratchABit، وهي عبارة عن أداة تفكيك تفاعلية تهدف إلى تنفيذ المهام ذات المستوى الأدنى من عملية فك الترجمة، مثل فصل التعليمات البرمجية عن البيانات وتحديد حدود الوظائف. يعمل ScratchABit عادةً مع بناء جملة مجمع معماري أصلي، ولكن بالنسبة لبعض البنيات (عادةً، RISCs المخلصة)، إذا توفر مكون إضافي مناسب، فيمكنه إخراج بناء جملة PseudoC، والذي يمكن أن يكون بمثابة مدخلات إلى ScratchABlock.