
برنامج C2 للأنظمة المدمجة مكتوب بلغة C/C#
إطار عمل أوني هو منصة لتطوير برمجيات الأجهزة المضمنة. يتم استخدامه من أجل تصحيح الأخطاء عن بعد / إضافة وظائف لجهاز مضمن. في الوقت الحالي، المفاهيم الرئيسية هي نظام إضافات كامل معيارية، مع استدعاء إجراء بعيد محلي وعن بعد (rpc). تم تصميم هذا ليعمل على مستوى الامتياز ring-0، ولكن مع بعض التعديلات يمكن استخدامه أيضًا على مستويات ring-3. يُحذَّر، هذا ليس للاستخدام الإنتاجي، فقط للمطورين الذين يريدون منصة بناء سهلة للبحث.
الميزات المخطط لها:
يتطلب إطار عمل Oni-Framework فقط أن تقوم باستعراض هذا الدليل وتنفيذ ملف oni/utils/kdlsym/default.h مع جميع التطبيقات المطلوبة. بعد ذلك، يجب أن يتم تجميعه بشكل جيد باستخدام gcc أو clang وينتج ملفًا تنفيذيًا. ستحتاج إلى طريقة تنفيذ خاصة بك (BYO-execution method)، لكن بالنسبة لمعظم الأجهزة المضمنة يمكن تحقيق ذلك عبر شل ssh، أو شل عبر telnet، أو أي شل من هذا القبيل. قد تحتاج الأجهزة الأخرى إلى التحميل في سياق الذاكرة قيد التشغيل، ثم القفز إلى main الذي سيتولى جميع مشكلات التهيئة.
git clone https://github.com/kiwidoggie/oni-framework.git
أ. اختياري: تعيين موقع رؤوس FreeBSD export BSD_INC="/path/to/freebsd/headers/include"make create الذي سينشئ هيكل المجلداتmake
أ. إذا لم تقم بتعيين متغير البيئة، يمكنك البناء باستخدام make BSD_INC=/path/to/freebsd/headers/includeلا يعتمد Oni-Framework على مكتبة libc كاملة الوظائف، وهو مبني للبناء والتشغيل بشكل مستقل تمامًا (بشرط توفر جميع المتطلبات الأساسية). بدلاً من ذلك، يتم تجميع الوظائف المطلوبة من الحد الأدنى من الوظائف الموجودة إما في سياق عملية قيد التشغيل، أو سياق النواة (الأخير هو الوحيد المختبر).
include/oni/utils/kdlsym/my_platform.hinclude/oni/utils/kdlsym/default.h إلى ملف الرأس الذي أنشأته حديثًاinclude/oni/utils/kdlsym.h#if ONI_PLATFORM==ONI_UNKNOWN_PLATFORM
#include "kdlsym/default.h"
#elif ...
#elif ONI_PLATFORM==ONI_MY_PLATFORM
#include "kdlsym/my_platform.h"
#endif
include/oni/config.h// Unknown device
#define ONI_UNKNOWN_PLATFORM -1
#define ONI_MY_PLATFORM 5
#define ONI_PLATFORM ONI_UNKNOWN_PLATFORM إلى #define ONI_PLATFORM ONI_MY_PLATFORMإذا كنت ترغب في المساهمة، فقط قم بتقديم طلب سحب (pull request). بخلاف ذلك، لا يوجد دعم حقيقي لهذا في الوقت الحالي. قد يتغير هذا في المستقبل
| إزاحة البت | طول البت | الاسم | الوصف | الاستخدام |
|---|
| 0 | 3 | السحر | هذا هو سحر رأس الحزمة البسيط لضمان معالجة الرسائل بشكل صحيح | مطلوب: يجب تعيينه إلى 0101b أو 5 (عشري) |
| 3 | 4 | فئة الرسالة | يصف أي فئة سيتم توجيه الرسالة إليها في جانب Oni-Framework | مطلوب: الحد الأقصى 14 فئة (5 قيد الاستخدام حالياً) |
| 7 | 32 | خطأ/نوع الرسالة | يحتوي هذا الحقل على رمز الخطأ أو نوع الرسالة | الطلبات: يجب تعيينه إلى نوع الرسالة والذي يتم حسابه حالياً بواسطة CRC32(MessageName)، الاستجابة: يتم تعيينه إلى رمز الخطأ/القيمة المرجعة |
| 39 | 16 | حجم الحمولة | هذا هو طول البيانات التي تأتي بعد رأس الرسالة | اختياري: قم بتعيينه إلى 0 إذا لم تكن هناك حمولة، وإلا فسيتوقع بيانات |
| 55 | 1 | طلب | سيتم تعيين هذه العلامة إلى 1 إذا كانت الرسالة طلبًا، أو 0 إذا كانت استجابة | مطلوب |
| 56 | 7 | محجوز | محجوز | يتم تجاهله: قم بتعيينه إلى 0 |