Archie هو إطار قائم على QEMU للتقييم المستقل عن العمارة للأخطاء. يسمح للمستخدم بتحديد حملات الخطأ باستخدام ملف تكوين JSON وتشغيل الحملة بأكملها تلقائيًا دون إدخال مستخدم إضافي. Archie قادر على محاكاة الأخطاء الدائمة والعابرة في التعليمات والذاكرة والسجلات. يتم جمع البيانات السلوكية للهدف وتخزينها داخل ملف سجل HDF5 للتحليل لاحقًا.
لاستخدام برنامج Python هذا ، هناك حاجة إلى QEMU مع البرنامج المساعد (يمكن العثور على QEMU في QEMU ، يمكن العثور على المكون الإضافي للخطأ في مجلد plugin).
مثال على ذلك ، يمكن العثور على مشروع ، والذي يقوم بحقن الأخطاء في برنامج ثابت Tinyaes المدمج ،
[[ TOC ]]
بالنسبة إلى مجموعة الأدوات ، يجب تجميع QEMU والمكون الإضافي للخطأ. يمكن القيام بذلك تلقائيًا عن طريق تشغيل البرنامج النصي build.sh . يرجى التأكد من تثبيت المكتبات المطلوبة لـ QEMU ومكتبات Python لـ Archie. بالنسبة إلى Ubuntu ، يمكن لبرنامج Build Script تثبيت التبعيات المفقودة لـ QEMU و Python. سوف يسألك عما إذا كان يجب تثبيت التبعيات.
./build.sh
بدلاً من ذلك ، يتم توفير تعليمات الإنشاء في الأقسام التالية.
تم اختبار Archie مع QEMU 6.0 ، والذي يتوفر في Archie-QEMU. تأكد أولاً من تثبيت المتطلبات الأساسية لـ QEMU. انظر الويكي للحصول على المكتبات المطلوبة (https://wiki.qemu.org/hosts/linux). على أنظمة Ubuntu ، يمكنك تثبيت الحد الأدنى للحزم المطلوبة مع:
sudo apt install git build-essential ninja-build libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev
Checkout git submodule qemu ، والتي يجب أن تخترق tcg_plugin_dev من git. راجع مقطع الكود أدناه.
git submodule update --init
mkdir -p qemu/build/debug
cd qemu/build/debug
./../../configure --target-list=arm-softmmu --enable-debug --enable-plugins --disable-sdl --disable-gtk --disable-curses --disable-vnc
make -j {CPUCORENUMBER}
cd ../../../faultplugin/
make
مع هذا ، يتم بناء Archie-QEMU في QEMU/ Build/ Debug/ والمكون الإضافي في خطأ/ إذا قمت بتغيير دليل الإنشاء لـ Archie-QEMU ، فيرجى تغيير المسار في Makefile في FaultPlugin/ Folder لبناء المكون الإضافي.
لبرنامج Python3 ، هناك حاجة إلى المكتبات التالية
pandas (tested 0.25.3)
tables (tested 3.6.1)
python-prctl (tested 1.6.1)
numpy (tested 1.17.4)
json (tested 2.0.9), or json5 (tested 0.9.6)
يمكن تثبيت مكتبات Python3 هذه إما باستخدام طريقة تثبيت توزيع Linux أو باستخدام PIP3. ينصح بشدة JSON5 لأنه يسمح بتمثيل الأعداد الصحيحة كأرقام سداسية عشرية.
بالنسبة لـ pip3 ، يمكن استخدام المتطلبات. txt. إذا كنت تستخدم PIP3 ، فيرجى التأكد من تثبيت libcap-dev . وهو مطلوب ل python-prctl. انظر أيضًا https://pythonhosted.org/python-prctl/#downloading-and-installing
لاستخدام برنامج Python3 (Controller.py) ، هناك حاجة إلى ملفين للتكوين. هذه الملفات بتنسيق JSON. انظر https://www.json.org/json-en.html للحصول على التفاصيل.
يحتوي Qemuconf.json على كائن به المسار إلى QEMU قابل للتنفيذ ، ومكتبة البرنامج المساعد ، والسيوك ، والزواحف التي يجب أن تديرها QEMU. يمكن تحديد الوسائط الإضافية التي يجب تمريرها إلى QEMU باستخدام additional_qemu_args . انظر "qemuconf.json" للحصول على ملف JSON صالح مع مسارات. يرجى ضبط المسارات على نظامك المعني. يحتوي المجلد Miniblink على ثنائي تجريبي للتجريب الأولي. لاختبار ذلك ، قم بتعديل مسار kernel إلى "kernel "machine" : "stm32f0discovery" "kernel" : "miniblink/miniblink.bin -M ?
خطأ. json يحتوي على وصف للأخطاء. أنه يحتوي على كائن يستلزم كائن نقطة البدء ، وكائن نقطة النهاية ، وكائن memdump ومجموعة من الأعطال. يرجى الاطلاع على الأوصاف في re-readme.md لمعرفة كيفية بناء كائن JSON هذا. يمكن العثور على مثال لإعداد لعدة تجارب في خطأ. json
سيتم تخزين إخراج البرنامج في ملف HDF5. للحصول على وصف لكيفية تفسير محتوى الملف ، راجع HDF5-README.MD .
لتشغيل برنامج Python3 ، اكتب:
python3 controller.py --debug --fault fault.json --qemu qemuconf.json output.hdf5
استبدل خطأ. json و qemuconf.json بالملفات المقابلة.
تقوم علامة -Debug بإنشاء ملف سجل لكل تجربة. يحتوي اسم ملف السجل على التنسيق التالي: log_experiment-id.txt ، على سبيل المثال ، log_4.txt للتجربة مع المعرف 4.
للحصول على مزيد من المعلومات حول معلمات الإدخال ، اكتب:
python3 controller.py --help
من الممكن الاتصال بمثيل QEMU قيد التشغيل باستخدام GDB. لاستخدام هذه الميزة في الإطار ومراقبة الأعطال المقدمة ، يمكن تعيين علامة GDB . ستبدأ Archie عملية QEMU الداخلية مع تمكين GDB وتتوقف عند بدء تشغيل النظام المحاكاة. للاتصال بـ QEMU من GDB ، استخدم المنفذ 1234. كما أنه سيجبر الإطار على تفريغ عامل واحد فقط وسيخطو جميع الأخطاء التي تم تكوينها في Fault.json . إذا كان هناك حاجة إلى خطأ معين ، فيجب تحرير ملف JSON ليحتوي فقط على هذا الخطأ المحدد.
python3 controller.py --gdb --fault fault.json --qemu qemuconf.json output.hdf5
للاتصال من GDB إلى استخدام جلسة QEMU
targ rem:localhost:1234
ستنتظر Qemu Unil ، يتم إرفاق جلسة GDB. وضع تصحيح الأخطاء مناسب فقط لتحليل عدد منخفض من العيوب. إن التنقل عبر كمية كبيرة من الأعطال أمر مرهق. يجب مراعاة ذلك عند ضبط ملفات JSON.