
هندسة عكسية مدعومة بالذكاء الاصطناعي لـ Rosetta (2 لنظام Linux). تنبيه: بسبب اتفاقية المستخدم، لن أتطرق إلى الكود المصدري. كل شيء يتم بواسطة الذكاء الاصطناعي، لذلك قد يكون هناك تطبيق غير منظم.
جهد شامل للهندسة العكسية لفهم وتوثيق تقنية الترجمة الثنائية Rosetta 2 من Apple.
في نوفمبر 2020، أعلنت Apple عن أول حواسيب Mac بمعالج Apple Silicon، مما يمثل تحولًا تاريخيًا من معالجات Intel x86_64 إلى رقائقها الخاصة M1 القائمة على ARM. كان هذا ثالث تحول معماري رئيسي لـ Apple:
تطلب كل انتقال حلًا للترجمة الثنائية لتشغيل البرامج الموجودة خلال فترة الهجرة. Rosetta 2 هو أكثر أنظمة الترجمة الثنائية تطورًا من Apple حتى الآن.
Rosetta (2006-2011) كان أول برنامج ترجمة ثنائية ديناميكية من Apple، مما مكّن تطبيقات PowerPC من العمل على حواسيب Mac القائمة على Intel.
تمت إزالة Rosetta في Mac OS X 10.7 (Lion)، مما أكمل الانتقال إلى Intel.
Rosetta 2 هي تقنية ترجمة ثنائية ديناميكية متقدمة من Apple تتيح للتطبيقات المترجمة لحواسيب Mac ذات معالجات Intel x86_64 العمل على حواسيب Mac ذات معالجات Apple Silicon (ARM64).
┌─────────────────────────────────────────────────────────────┐ │ User Application (x86_64) │ ├─────────────────────────────────────────────────────────────┤ │ Rosetta 2 Layer │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │ │ │ Translator │ │ Runtime │ │ System Call │ │ │ │ (AOT/JIT) │ │ Library │ │ Translation │ │ │ └─────────────┘ └─────────────┘ └─────────────────────┘ │ ├─────────────────────────────────────────────────────────────┤ │ macOS Kernel (ARM64) │ ├─────────────────────────────────────────────────────────────┤ │ Apple Silicon Hardware │ └─────────────────────────────────────────────────────────────┘
### التقنيات الرئيسية
1. **الترجمة المسبقة (AOT)**
- يترجم ملفات x86_64 الثنائية إلى ARM64 وقت التثبيت
- يخزن الكود المترجم في ذاكرة تخزين مؤقت لتشغيل أسرع لاحقاً
- يقلل من الحمل الزمني مقارنة بالترجمة الفورية (JIT) الخالصة
2. **الترجمة الفورية (JIT)**
- يترجم أجزاء الكود عند الطلب أثناء التنفيذ
- يعالج الكود المحمل ديناميكياً والكود ذاتي التعديل
- يحافظ على ذاكرة تخزين مؤقت للترجمة لتحقيق الكفاءة
3. **ترجمة مجموعة التعليمات**
- تعيين تعليمات x86_64 إلى ARM64
- ترجمة تعليمات المتجهات SSE/AVX إلى NEON
- أعلام x86_64 إلى رموز الشروط في ARM64
4. **ترجمة استدعاءات النظام**
- يترجم استدعاءات نظام macOS لـ x86_64 إلى ما يعادلها لـ ARM64
- يعالج اصطلاحات الاستدعاء المختلفة
- يدير حالة المسجلات عبر حدود استدعاء النظام
5. **دعم وقت التشغيل**
- محاكاة اكتشاف ميزات المعالج
- معالجة التخزين المحلي للخيوط
- معالجة الإشارات والاستثناءات
---
## كيفية تقديم Apple لـ Rosetta 2 في macOS
### موقع التثبيت
توجد Rosetta 2 في:```
/Library/Apple/usr/libexec/oah/
├── rosetta # Main translator binary
├── rosettad # Rosetta daemon
└── librosetta.* # Runtime libraries
يشير مجلد oah إلى 'أجهزة العمارة القديمة' - استمرار من عصر الانتقال من PowerPC.
على أجهزة Mac المزودة بـ Apple Silicon، فإن Rosetta 2 غير مثبتة افتراضيًا. يتم تشغيلها بطريقتين:
| المكوّن | الوصف |
|---|---|
RosettaLinux/rosetta | ملف ثنائي أساسي ARM64 يحتوي على محرك الترجمة |
RosettaLinux/rosettad | خفي النظام لإدارة خدمات الترجمة |
debugserver -> /usr/libexec/rosetta/debugserver | دعم التصحيح للعمليات المترجمة |
libRosettaRuntime | مكتبة وقت التشغيل المرتبطة أثناء الترجمة |
translate_tool -> /usr/libexec/rosetta/translate_tool | أداة الترجمة لبناء ملفات ثنائية مترجمة |
┌──────────────────────────────────────────────────────────────────┐ │ Phase 1: Binary Loading │ │ ─────────────────────────────────────────────────────────────── │ │ 1. Load x86_64 Mach-O binary │ │ 2. Parse segments, sections, symbols │ │ 3. Validate code signatures │ │ 4. Map into translation context │ └──────────────────────────────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────────────────────┐ │ Phase 2: AOT Translation │ │ ─────────────────────────────────────────────────────────────── │ │ 1. Disassemble x86_64 code sections │ │ 2. Translate instructions to ARM64 │ │ 3. Apply optimizations │ │ 4. Store in translation cache (~/.oah) │ └──────────────────────────────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────────────────────┐ │ Phase 3: Runtime Execution │ │ ─────────────────────────────────────────────────────────────── │ │ 1. Load translated ARM64 code │ │ 2. Set up x86_64 emulation context │ │ 3. Handle JIT translations for dynamic code │ │ 4. Translate syscalls on-the-fly │ └──────────────────────────────────────────────────────────────────┘
### تحديات الترجمة الرئيسية
1. **تعيين السجلات**
- تحتوي x86_64 على 16 GPR؛ بينما تحتوي ARM64 على 31 GPR
- سجل الأعلام x86_64 -> أعلام NZCV لـ ARM64
- محاكاة RIP (مؤشر التعليمات)
2. **ترتيب الذاكرة**
- x86_64: ترتيب ذاكرة قوي (TSO)
- ARM64: ترتيب ذاكرة ضعيف
- يتطلب حواجز ذاكرة لضمان الصحة
3. **تعليمات المتجهات**
- SSE (128-bit) -> تعيين مباشر لـ NEON (128-bit)
- AVX (256-bit) -> محاكاة زوج NEON
- معالجة استثناءات مختلفة لـ SIMD
4. **اتفاقيات الاستدعاء**
- x86_64: أول 6 وسائط في السجلات (RDI, RSI, RDX, RCX, R8, R9)
- ARM64: أول 8 وسائط في السجلات (X0-X7)
- تخطيطات إطار مكدس مختلفة
---
## هذا المشروع
يحتوي هذا المستودع على تطبيقات هندسة عكسية للدوال من ثنائيات Rosetta 2. من خلال التحليل الدقيق وإلغاء الترجمة، قمنا بتحديد وتوثيق الغرض الدلالي لمئات الدوال.
### الأهداف