Emulator — bir apparat yoki dasturiy platformaning xatti-harakatini boshqa tizimda takrorlaydigan dastur yoki qurilma.
Emulator guest tizimga asl platformada ishlayotgandek muhit beradi. U boshqa CPU instruction set, qurilma registerlari, video, audio, storage va input tizimini taqlid qilishi mumkin.
Emulyatsiya dasturiy ta’minotni asl hardware bo‘lmagan sharoitda ishga tushirish va tahlil qilishga yordam beradi.
CPU emulyatsiyasi
Agar guest instruction set hostnikidan farq qilsa, emulator instructionlarni tarjima qiladi.
Masalan:
ARM guest instruction
→ emulator tarjimasi
→ x86-64 host instruction
Usullar:
- interpretatsiya;
- dynamic binary translation;
- ahead-of-time translation;
- hardware-assisted virtualization, arxitektura mos bo‘lsa.
Interpretatsiya sodda, lekin sekinroq.
Dynamic binary translation
Emulator guest kod blokini host instructionlariga tarjima qilib, cache’da saqlaydi.
Keyingi bajarishda qayta tarjima talab qilinmaydi.
Muammolar:
QEMU TCG shunday yondashuvga misol.
Hardware emulyatsiyasi
Faqat CPU emas, qurilmalar ham taqlid qilinadi.
Misollar:
- chipset;
- interrupt controller;
- timer;
- UART;
- disk controller;
- network card;
- GPUning soddalashtirilgan modeli;
- USB.
Guest driver emulated qurilmani haqiqiy hardware deb ko‘radi.
Platform emulyatsiyasi
To‘liq platforma emulatori bootloader va operatsion tizimni ishga tushira oladi.
U quyidagilarni taqdim etadi:
Embedded firmware tahlilida muhim.
Console emulator
Klassik o‘yin konsoli emulatori eski hardware’ni zamonaviy kompyuterda takrorlaydi.
U:
- CPU;
- grafik chip;
- audio;
- controller;
- cartridge yoki disc;
- timing
ni emulyatsiya qiladi.
Huquqiy jihatdan emulator dasturi bilan mualliflik huquqiga ega ROM fayllari alohida masala.
Terminal emulator
“Terminal emulator” boshqa ma’noda ishlatiladi.
U eski fizik terminalning ekran va control sequence xatti-harakatini dasturda taqlid qiladi.
Misollar:
- xterm;
- GNOME Terminal;
- Windows Terminal.
Bu CPU yoki butun kompyuter emulyatsiyasi emas.
Compatibility layer
Wine kabi compatibility layer Windows API chaqiruvlarini boshqa OS APIga tarjima qiladi.
U to‘liq CPU yoki hardware emulyatori bo‘lmasligi mumkin.
Guest application native CPU instructionlarida ishlaydi, system call va library interfeysi moslashtiriladi.
Emulator va simulator
Emulator tashqi kuzatuvchi uchun asl tizim xatti-harakatini takrorlashga intiladi va real binary’ni ishga tushirishi mumkin.
Simulator tizimning matematik yoki mantiqiy modelini o‘rganishga qaratiladi.
Masalan, network simulator paket oqimini model qiladi, lekin real router firmware’ni ishga tushirmasligi mumkin.
Aniqlik
Emulyatsiya aniqligi turlicha.
High-level emulation
Qurilma ichki detallarini emas, natijaviy API xatti-harakatini taqlid qiladi.
Tezroq, lekin edge case farq qilishi mumkin.
Low-level emulation
Register, timing va hardware operatsiyalarini batafsil takrorlaydi.
Aniqroq, lekin sekin.
Timing
Ba’zi software hardware timingga bog‘liq.
Emulator:
ni moslashtirishi kerak.
Timing noto‘g‘ri bo‘lsa, audio, animatsiya yoki protocol ishlamaydi.
Development
Emulator quyidagi ishlarni tezlashtiradi:
- mobil ilova test;
- embedded firmware;
- cross-platform build;
- CI;
- driver development;
- eski software;
- malware tahlili.
Har test real qurilmada bajarilmasa ham, yakuniy moslik fizik hardwareda tekshiriladi.
Android emulator
Android emulator virtual Android qurilmasini taqdim etadi.
Sozlamalar:
Host va guest arxitekturasi mos bo‘lsa hardware acceleration ishlatiladi.
Network emulation
Network emulator real packetlarni sun’iy sharoitdan o‘tkazadi.
U:
ni qo‘llashi mumkin.
Bu real applicationni yomon tarmoqda sinash uchun ishlatiladi.
Debugging
Emulator hardwaredan ko‘ra ko‘proq kuzatuv beradi.
Imkoniyatlar:
Firmware tahlilida bu juda foydali.
Performance
Emulyatsiya native bajarishdan sekinroq bo‘lishi mumkin.
Ta’sir omillari:
- instruction set farqi;
- dynamic translation;
- device modeli;
- grafik acceleration;
- disk image;
- debug logging;
- timing aniqligi.
Hardware virtualization arxitektura mos bo‘lsa performance’ni oshiradi, lekin bu sof emulyatsiya emas.
Xavfsizlik
Noma’lum image emulator ichida ishlatilsa ham, emulator zaifligi hostga chiqish imkonini berishi mumkin.
Himoya:
- yangilangan emulator;
- sandbox;
- tarmoqni cheklash;
- read-only image;
- host folder sharingni o‘chirish;
- minimal privilege.
Malware analysis uchun alohida izolyatsiya kerak.
Diagnostika
Emulator muammosida:
- guest architecture;
- firmware image;
- device model;
- acceleration;
- RAM;
- storage format;
- driver;
- timing;
- graphics backend;
- log
tekshiriladi.
Emulatorda ishlashi real hardware’da mutlaq moslikni kafolatlamaydi.
Firmware emulyatsiyasi
Router yoki IoT firmware’ni emulyatsiya qilishda root filesystem ajratiladi va mos CPU arxitekturasi tanlanadi. Kernel, device tree va periferik qurilmalar yetishmasa, firmware to‘liq boot qilmasligi mumkin.
Ba’zan faqat web service yoki bitta binary chroot va user-mode emulation orqali ishga tushiriladi. Bu to‘liq platforma emulyatsiyasidan yengilroq, ammo hardwarega bog‘liq funksiyalar ishlamaydi.
Save state
Emulator xotira, CPU register va device holatini faylga saqlashi mumkin. Keyin ayni nuqtadan davom etiladi.
Save state dastur ichidagi oddiy save file’dan farq qiladi va emulator versiyasiga bog‘liq bo‘lishi mumkin.
Input va periferik qurilmalar
Emulator keyboard, controller, touchscreen va sensor inputlarini host qurilmalardan xaritalaydi. Noto‘g‘ri mapping dastur ishlayotgan bo‘lsa ham boshqaruvni imkonsiz qiladi.
Bog‘liq tushunchalar
Simulation, Virtualization, QEMU, CPU architecture, Dynamic binary translation, Terminal emulator, Compatibility layer, Android emulator