
هندسة عكسية مدعومة بالذكاء الاصطناعي لـ 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 غير مثبتة افتراضيًا. يتم تشغيلها بطريقتين:
┌──────────────────────────────────────────────────────────────────┐ │ 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. من خلال التحليل الدقيق وإلغاء الترجمة، قمنا بتحديد وتوثيق الغرض الدلالي لمئات الدوال.
### الأهداف
1. **تعليمي**: فهم كيفية عمل Rosetta 2 داخليًا
2. **توثيق**: إنشاء توثيق شامل لتقنيات الترجمة
3. **تطبيق**: تقديم تطبيقات C نظيفة وموثقة جيدًا
4. **مجتمع**: مشاركة المعرفة مع مجتمع الهندسة العكسية
### ما أنجزناه
- تم تحديد وتسمية **828 دالة** في الثنائي الرئيسي `rosetta`
- تم تطبيق **612 دالة** بالكامل بكود C نظيف
- تم توثيق **66 فئة** من الوظائف
- خرائط كاملة لأسماء الدوال مع أسماء دلالية
### فئات الدوال
| الفئة | الدوال | الوصف |
|----------|-----------|-------------|
| نقطة الدخول | 1 | تهيئة Rosetta |
| عمليات الفاصلة العائمة/المتجهات | ~20 | إدارة حالة الفاصلة العائمة و SIMD |
| عمليات ذاكرة SIMD | ~10 | memchr و memcmp و memcpy باستخدام SIMD |
| عمليات المتجهات | ~30 | عمليات حسابية ومقارنة متجهات NEON |
| الترجمة الثنائية | ~50 | ترجمة تعليمات x86_64 -> ARM64 |
| معالجات استدعاءات النظام | ~60 | ترجمة وإعادة توجيه استدعاءات النظام |
| إدارة الذاكرة | ~20 | أغلفة لـ malloc و free و mmap |
| دوال التجزئة | ~5 | تجزئة العناوين لذاكرة الترجمة المؤقتة |
| عمليات السلاسل | ~30 | دوال سلاسل محسّنة بـ SIMD |
| الامتدادات التشفيرية | ~30 | تمرير AES و SHA و CRC32 |
| تحليل ELF | ~15 | دعم تنسيق ثنائيات لينكس |
| ذاكرة الترجمة المؤقتة | ~20 | إدارة ذاكرة الترجمة المؤقتة AOT/JIT |
---
## هيكل الملفات
### الملفات الأساسية```
Rosetta2/
├── README.md # This file
├── rosetta_decomp.c # Original decompilation (74,677 lines)
├── rosettad_decomp.c # Daemon decompilation (44,064 lines)
├── rosetta_refactored.c # Minimal wrapper (59 lines) - includes modular headers
├── rosetta_refactored.c.legacy # Legacy refactored code (19,302 lines) - archived
├── rosetta_refactored.h # Main header (1,215 lines)
├── rosetta_refactored_complete.c # Single-file implementation (2,686 lines)
├── rosetta_function_map.h # Function name mapping (828 functions)
├── rosettad_refactored.c # Daemon-side refactoring
└── SESSION_*.md # Session logs (30+ sessions)
تم تصميم بنية التحويل بشكل معياري بالكامل في مكونات مصنفة:``` ├── rosetta_types.h # Base type definitions ├── rosetta_x86_decode.h/.c # x86 decoder ├── rosetta_arm64_emit.h/.c # ARM64 emitter ├── rosetta_translate_alu.h/.c # ALU translations ├── rosetta_translate_memory.h/.c # Memory translations ├── rosetta_translate_branch.h/.c # Branch translations ├── rosetta_translate_bit.h/.c # Bit manipulation ├── rosetta_translate_string.h/.c # String operations ├── rosetta_translate_special.h/.c # Special instructions ├── rosetta_translate_block.h/.c # Block translation coordinator ├── rosetta_translate_dispatch.h/.c # Instruction dispatch ├── rosetta_trans_dispatch.h/.c # Main dispatch layer ├── rosetta_trans_alu.h/.c # ALU emulation layer ├── rosetta_trans_mem.h/.c # Memory emulation layer ├── rosetta_trans_branch.h/.c # Branch emulation layer ├── rosetta_trans_bit.h/.c # Bit emulation layer ├── rosetta_trans_string.h/.c # String emulation layer ├── rosetta_trans_special.h/.c # Special instruction emulation ├── rosetta_trans_system.h/.c # System instruction emulation ├── rosetta_trans_neon.h/.c # NEON emulation layer └── Makefile.modular # Modular build system
### الوحدات الوظيفية
الوحدات الأساسية للبنية التحتية والدعم:```
├── rosetta_jit.h/.c # JIT compilation infrastructure
├── rosetta_exec.h/.c # Execution engine (NEW)
├── rosetta_init.h/.c # Initialization & FP registers (NEW)
├── rosetta_codegen.h/.c # Code generation primitives
├── rosetta_cache.h/.c # Translation cache (AOT/JIT)
├── rosetta_transcache.h/.c # Translation cache management
├── rosetta_context.h/.c # CPU context management
├── rosetta_runtime.h/.c # Runtime support
├── rosetta_hash.h/.c # Address hashing
├── rosetta_memmgmt.h/.c # Memory management
├── rosetta_memory_utils.h/.c # Memory utilities
├── rosetta_utils.h/.c # Utility functions
├── rosetta_string_utils.h/.c # String utilities
├── rosetta_trans_helpers.h/.c # Translation helpers
├── rosetta_refactored_helpers.h/.c # Refactoring helpers
└── rosetta_refactored_types.h # Refactored type definitions
وحدات عمليات SIMD و Vector:``` ├── rosetta_simd.h/.c # SIMD operations ├── rosetta_simd_mem.h/.c # SIMD memory operations ├── rosetta_simd_mem_helpers.h/.c # SIMD memory helpers ├── rosetta_vector.h/.c # Vector operations ├── rosetta_refactored_vector.h/.c # Refactored vector ops ├── rosetta_jit_emit.h/.c # JIT emission ├── rosetta_jit_emit_simd.h/.c # SIMD JIT emission ├── rosetta_fp_translate.h/.c # FP translation ├── rosetta_fp_helpers.h/.c # FP helpers ├── rosetta_trans_neon.c # NEON translation └── rosetta_string_simd.c # SIMD string operations
### وحدات Syscall
معالجة وترجمة syscall للضيف:```
├── rosetta_syscalls.h/.c # Syscall translation core
├── rosetta_syscalls_impl.h/.c # Syscall implementations
└── rosetta_crypto.h/.c # Crypto instructions (AES, SHA, CRC32)
وحدات ترجمة ودعم إضافية:``` ├── rosetta_translate.h/.c # Translation core ├── rosetta_translate_alu_impl.h/.c # ALU implementation details ├── rosetta_translate_memory_impl.h/.c # Memory implementation details ├── rosetta_translate_branch_impl.h/.c # Branch implementation details ├── rosetta_translate_special_impl.h/.c # Special implementation details └── rosetta_arm64_insns.h # ARM64 instruction definitions
### ملفات الاختبار```
├── test_jit.c # JIT unit tests (737 lines)
└── test_translate.c # Translation tests (1,059 lines)
الإجمالي: 50+ ملف مصدر، ~150,000+ سطر من الكود
make -f Makefile.modular all
### بناء المكونات الفردية```bash
# Compile core modules
gcc -c -I. -std=c11 rosetta_types.h
gcc -c -I. -std=c11 rosetta_codegen.c
gcc -c -I. -std=c11 rosetta_jit.c
gcc -c -I. -std=c11 rosetta_x86_decode.c
gcc -c -I. -std=c11 rosetta_arm64_emit.c
# Compile translation modules
gcc -c -I. -std=c11 rosetta_translate_alu.c
gcc -c -I. -std=c11 rosetta_translate_memory.c
gcc -c -I. -std=c11 rosetta_translate_branch.c
gcc -c -I. -std=c11 rosetta_translate_block.c
gcc -c -I. -std=c11 rosetta_translate_dispatch.c
# Compile support modules
gcc -c -I. -std=c11 rosetta_cache.c
gcc -c -I. -std=c11 rosetta_context.c
gcc -c -I. -std=c11 rosetta_syscalls.c
gcc -c -I. -std=c11 rosetta_runtime.c
make -f Makefile.modular test_jit
make -f Makefile.modular test_translate
### الاستخدام كمكتبة```bash
# Link against the static library
gcc -o my_app my_app.c -L. -lrosetta
# Or compile with source files directly
gcc -I. -o my_app my_app.c rosetta_*.c
الملف المُفكك الأصلي rosetta_decomp.c يحتوي على سلاسل نصية حرفية تكشف هيكل ملف المصدر الأصلي. تظهر أسماء الملفات هذه في رسائل التأكيد/الخطأ في جميع أنحاء الملف الثنائي.
ملاحظة: يستخدم الكود المُعاد هيكلته هيكلاً مختلفاً وأكثر نمطية من الأصلي.
Register.hTaggedPointer.hRedBlackTree.hTransactionalList.hTranslator.hAssemblerBuffer.hBuilderBase.hIrBuilder_x86.hRepatch.cppDecoder.cppFixup.cppAssemblerHelpers.cppOperand.cppOpcode.cppBasicBlock.cppThreadContextFcntl.cppInitStack.cppThread.cppThreadContext.cppThreadContextRuntimeSignals.cppThreadContextVm.cppVMAllocationTracker.cppAssemblerBase.hppTranslatorBase.hppتم تنميط البنية التحتية للترجمة بالكامل في المكونات التالية:
الإجمالي: 40+ مكوناً نمطياً
هذا المشروع لأغراض تعليمية وبحثية فقط.
رخصة MIT - راجع ملف LICENSE للحصول على التفاصيل.
المساهمات مرحب بها! مجالات الاهتمام:
آخر تحديث: فبراير 2026
| المكوّن | الوصف |
|---|
RosettaLinux/rosetta | ملف ثنائي أساسي ARM64 يحتوي على محرك الترجمة |
RosettaLinux/rosettad | خفي النظام لإدارة خدمات الترجمة |
debugserver -> /usr/libexec/rosetta/debugserver | دعم التصحيح للعمليات المترجمة |
libRosettaRuntime | مكتبة وقت التشغيل المرتبطة أثناء الترجمة |
translate_tool -> /usr/libexec/rosetta/translate_tool | أداة الترجمة لبناء ملفات ثنائية مترجمة |
Vdso.cppProcMapsParser.cppThreadContextSignals.cppThreadContextSyscalls.cppTranslationCacheAot.cppTranslationCacheJit.cppTranslationCache.cppTranslator.cppRuntimeLibraryBridgeInternal.cppTwoLevelOffsetMap.cppDeltaCodedOffsetMap.cpp| المقياس | القيمة |
|---|
| إجمالي الدوال | 828 |
| الدوال المُعيّنة | 828 (100%) |
| الدوال المُنفذة | 600+ |
| الإنجاز | ~75% |
| الفئات المُوثّقة | 66 |
| ملفات المصدر | 56 C + 65 H |
| إجمالي أسطر الكود | ~150,000+ |
| فئة الوحدة | الملفات | الوصف |
|---|
| الأنواع الأساسية | rosetta_types.h | تعريفات الأنواع الأساسية |
| محرك التنفيذ | rosetta_exec.h/.c | execute_translated، تبديل السياق |
| التهيئة | rosetta_init.h/.c | init_translation_env، مسجلات FP |
| فك تشفير x86 | rosetta_x86_decode.h/.c | مفكك تعليمات x86_64 |
| إصدار ARM64 | rosetta_arm64_emit.h/.c | إصدار كود ARM64 |
| توليد الكود | rosetta_codegen.h/.c | بدائيات توليد الكود |
| نواة JIT | rosetta_jit.h/.c | بنية التحويل البرمجي في الوقت الفعلي |
| ذاكرة الترجمة المؤقتة | rosetta_cache.h/.c، rosetta_transcache.h/.c | التخزين المؤقت للكتل (AOT/JIT) |
| ترجمة الكتلة | rosetta_translate_block.h/.c | ترجمة الكتلة الأساسية |
| توزيع التعليمات | rosetta_trans_dispatch.h/.c | توزيع التعليمات |
| ترجمة ALU | rosetta_translate_alu.h/.c، rosetta_trans_alu.h/.c | عمليات حسابية/منطقية |
| ترجمة الذاكرة | rosetta_translate_memory.h/.c، rosetta_trans_mem.h/.c | عمليات التحميل/التخزين |
| ترجمة الفرع | rosetta_translate_branch.h/.c، rosetta_trans_branch.h/.c | تدفق التحكم |
| ترجمة البت | rosetta_translate_bit.h/.c، rosetta_trans_bit.h/.c | معالجة البت |
| ترجمة السلسلة | rosetta_translate_string.h/.c، rosetta_trans_string.h/.c | عمليات السلسلة |
| الترجمة الخاصة | rosetta_translate_special.h/.c، rosetta_trans_special.h/.c | تعليمات خاصة |
| ترجمة النظام | rosetta_trans_system.h/.c | مسجلات النظام |
| ترجمة NEON | rosetta_trans_neon.c | عمليات SIMD/NEON |
| عمليات SIMD | rosetta_simd.h/.c، rosetta_simd_mem.h/.c | عمليات SIMD |
| عمليات المتجهات | rosetta_vector.h/.c | عمليات المتجهات |
| ترجمة FP | rosetta_fp_translate.h/.c، rosetta_fp_helpers.h/.c | النقطة العائمة |
| إصدار JIT | rosetta_jit_emit.h/.c، rosetta_jit_emit_simd.h/.c | إصدار JIT |
| استدعاءات النظام | rosetta_syscalls.h/.c، rosetta_syscalls_impl.h/.c | معالجة استدعاءات النظام |
| التشفير | rosetta_crypto.h/.c | AES، SHA، CRC32 |
| السياق | rosetta_context.h/.c | حفظ/استعادة سياق وحدة المعالجة المركزية |
| وقت التشغيل | rosetta_runtime.h/.c | نقطة دخول وقت التشغيل |
| إدارة الذاكرة | rosetta_memmgmt.h/.c | إدارة الذاكرة |
| الأدوات المساعدة | rosetta_utils.h/.c، rosetta_string_utils.h/.c | دوال مساعدة |
| الفئة | التعليمات |
|---|
| ALU | ADD، SUB، AND، OR، XOR، MUL، DIV، INC، DEC، NEG، NOT، SHL، SHR، SAR، ROL، ROR |
| الذاكرة | MOV، MOVZX، MOVSX، MOVSXD، LEA، PUSH، POP، CMP، TEST |
| الفرع | Jcc، JMP، CALL، RET، CMOVcc، SETcc، XCHG |
| البت | BSF، BSR، POPCNT، BT، BTS، BTR، BTC |
| السلسلة | MOVS، STOS، LODS، CMPS، SCAS |
| الخاصة | CPUID، RDTSC، SHLD، SHRD، CWD، CDQ، CQO، CLI، STI، NOP |
| SIMD | SSE، SSE2، SSE3، SSSE3، SSE4.x |
| FP | x87، SSE scalar FP |
| التشفير | AES-NI، SHA، CRC32 |
| الجلسة | التركيز | الملفات التي تم إنشاؤها/تعديلها |
|---|
| 61+ | تنميط كامل | 35+ مكوناً نمطياً |
| 61 | تنميط الترجمة | 6 وحدات ترجمة + تحسينات x86_decode |
| 60 | بنية الترجمة | تنفيذ نواة translate_block() |
| 59 | تطبيق استدعاءات النظام | معالجات إضافية لاستدعاءات النظام |
| 58 | ترجمة استدعاءات النظام | معالجات I/O vector والشبكة |
| 57 | إدارة الذاكرة | تحسينات متتبع تخصيص VM |
| 56 | عمليات SIMD | ترجمات SIMD المتقدمة |
| 55 | FP/SIMD | ترجمة تعليمات النقطة العائمة |
| 54 | إضافات التشفير | تطبيق تمرير AES-NI |
| 53 | إضافات التشفير | تعليمات SHA و CRC32 |
| 52 | عمليات السلسلة | دوال سلسلة مُحسّنة مع SIMD |
| 51 | عمليات المتجهات | حساب المتجهات NEON |
| 50 | تحويلات المتجهات | تحويلات النقطة العائمة |
| 49 | ذاكرة الترجمة المؤقتة | إدارة ذاكرة AOT/JIT |
| 48 | نواة JIT | بنية التحويل البرمجي في الوقت الفعلي |
| 46-47 | توليد الكود | أدوات مساعدة لتوليد كود x86_64 |
| 45 | أدوات مساعدة لفك التشفير | أدوات مساعدة لفك تشفير ARM64 |