Pierwsze wydanie Blink, wysokowydajnego emulatora x86-64

Ukazało się pierwsze znaczące wydanie projektu Blink, rozwijającego emulator procesorów x86-64, który pozwala na uruchamianie statycznie i dynamicznie budowanych aplikacji Linux na maszynie wirtualnej z emulowanym procesorem. Dzięki Blink programy linuksowe skompilowane dla architektury x86-64 można uruchamiać na innych systemach operacyjnych zgodnych z POSIX (macOS, FreeBSD, NetBSD, OpenBSD, Cygwin) oraz na sprzęcie z inną architekturą sprzętową (x86, ARM, RISC-V, MIPS , PowerPC, s390x). Kod projektu napisany jest w języku C (ANSI C11) i jest rozpowszechniany na licencji ISC. Spośród zależności wymagana jest tylko biblioteka libc (POSIX.1-2017).

Pod względem funkcjonalności Blink jest podobny do polecenia qemu-x86_64, ale różni się od QEMU bardziej zwartą konstrukcją i znacznym wzrostem wydajności. Na przykład plik wykonywalny Blink zajmuje tylko 221 KB (przy okrojonej kompilacji - 115 KB) zamiast 4 MB dla qemu-x86_64, a w niektórych testach, takich jak uruchamianie w emulatorze GCC i wykonywanie operacji matematycznych, radzi sobie lepiej QEMU około dwukrotnie.

Aby zapewnić wysoką wydajność, zastosowano kompilator JIT, który na bieżąco konwertuje instrukcje źródłowe na kod maszynowy dla platformy docelowej. Emulator obsługuje bezpośrednie uruchamianie plików wykonywalnych w formatach ELF, PE (Portable Executables) i bin (Flat wykonywalny), skompilowanych ze standardowymi bibliotekami C Cosmopolitan, Glibc i Musl. Wbudowana obsługa 180 wywołań systemowych systemu Linux i emulacja około 600 instrukcji procesora x86 obejmujących i8086, i386, SSE2, x86_64, SSE3, SSSE3, CLMUL, POPCNT, ADX, BMI2 (MULX, PDEP, PEXT), X87, RDRND, RDSEED zestawy instrukcji i RDTSCP.

Dodatkowo, w oparciu o Blink, rozwijane jest narzędzie Blinkenlights, które udostępnia interfejs umożliwiający wizualizację postępu wykonywania programu i analizę zawartości pamięci. Narzędzie może służyć jako debugger obsługujący tryb odwrotnego debugowania i umożliwiający cofnięcie się w historii wykonywania i powrót do poprzednio wykonanego punktu. Projekt jest rozwijany przez autora takich rozwiązań jak biblioteka Cosmopolitan C, port mechanizmu izolacji zobowiązań dla systemu Linux oraz uniwersalny system plików wykonywalnych Redbean.

Pierwsze wydanie Blink, wysokowydajnego emulatora x86-64


Źródło: opennet.ru

Dodaj komentarz