SamsEmung implements two distinct emulation paths:
┌──────────────────────────────┐ ┌──────────────────────────────┐
│ Host Machine │ │ Emulated Samsung Device │
├──────────────────────────────┤ ├──────────────────────────────┤
│ 1. Подготовка образов: │ │ │
│ - boot.img │ │ │
│ - system.dump │ │ │
│ - vendor.img │ │───mount─────► │
│ 2. Конфигурация QEMU: │ │ 3. Инициализация виртуального│
│ - Выбор машины: virt │ │ железа: │
│ - CPU: cortex-a78 │ │ - Загрузчик (U-Boot) │
│ - Память: 8G │ │ - Инициализация ядра │
│ - Устройства: │ │ - Монтирование разделов │
│ * virtio-gpu │ │ │
│ * virtio-blk │ │ │
│ │◄──IRQ/MMIO──┤ │
│ 4. Запуск эмуляции: │ │ 5. Загрузка Android: │
│ qemu-system-aarch64 ... │ │ - Init Process │
│ │◄─ADB/USB────┤ - Запуск Zygote│
│ 6. Взаимодействие: │ │ - Запуск TouchWiz │
│ - ADB подключение │ │ │
│ - Графический интерфейс │ │ │
└──────────────────────────────┘ └──────────────────────────────┘
┌──────────────────────────────┐ ┌──────────────────────────────┐
│ Host Application │ │ Emulated CPU (ARM64) │
├──────────────────────────────┤ ├──────────────────────────────┤
│ 1. Инициализация Unicorn: │ │ │
│ - Архитектура: ARM64 │ │ │
│ - Режим: ARM │ │ │
│ │───mem_map───► │
│ 2. Настройка памяти: │ │ 3. Загрузка кода: │
│ - Код: 0x80000000 │ │ - Чтение бинарника │
│ - Стек: 0x90000000 │ │ (например, из boot.img) │
│ - Данные: 0xA0000000 │ │ │
│ │◄──hook──────┤ │
│ 4. Регистрация хуков: │ │ 5. Выполнение инструкций: │
│ - Трассировка кода │ │ - Пошагово или блоками │
│ - Перехват SVC/SMC │ │ │
│ │◄──callback──┤ │
│ 6. Обработка исключений: │ │ 7. Эмуляция периферии: │
│ - Ручная эмуляция │ │ - Системные вызовы │
│ MMIO/регистров │ │ - Память/таймеры │
└──────────────────────────────┘ └──────────────────────────────┘