Blink emulator x86-64, który obiecuje przewyższyć QEMU

miga-gcc

Zrzut ekranu z miganiem

Niedawno pojawiła się wiadomość, że projekt Blink opracowuje nowy emulator procesora x86-64, który pozwala uruchamiać skompilowane aplikacje Linux statycznie na maszynie wirtualnej z emulowanym procesorem.

Wspomniano, że egłówny cel z projektu jest zapewnienie możliwości uruchamiania programów linuksowych skompilowanych dla architektury x86-64 na innych systemach operacyjnych (macOS, FreeBSD, NetBSD, OpenBSD) oraz na komputerach o innej architekturze sprzętowej (x86, ARM, RISC-V, MIPS, PowerPC, s390x).

W repozytorium projektu miganie opisują w następujący sposób:

Blink to maszyna wirtualna, która uruchamia statycznie skompilowane programy x86-64-linux w różnych systemach operacyjnych i architekturach sprzętowych. Jest przeznaczony do robienia tego samego, co polecenie qemu-x86_64, z wyjątkiem tego, że (a) zamiast być plikiem binarnym 4 MB, Blink ma tylko ~ 160 KB; oraz (b) Blink jest 2x szybszy niż Qemu w niektórych testach porównawczych, takich jak emulacja GCC. Kompromis polega na tym, że Blink nie ma tak wielu funkcji jak Qemu. Blink idealnie pasuje, gdy potrzebujesz maszyny wirtualnej, która jest bardzo mała i znacznie szybciej uruchamia efemeryczne programy. Aby uzyskać więcej informacji na temat motywacji tego narzędzia, przeczytaj https://justine.lol/ape.html.

Warto wspomnieć, że projekt jest rozwijany przez autora takich rozwiązań jak biblioteka Cosmopolitan C, port mechanizmu izolacji zobowiązań dla Linuksa oraz uniwersalny system plików wykonywalnych Redbean.

Pod względem funkcjonalności, Blink wygląda jak polecenie qemu-x86_64, ale różni się od QEMU bardziej zwartą konstrukcją i znacznym wzrostem wydajności. Na przykład plik wykonywalny Blink ma tylko 157 KB zamiast 4 MB dla qemu-x86_64 i pod względem wydajności w teście uruchomionym na emulatorze GCC, Blink pokonuje QEMU dwukrotnie.

Aby zapewnić wysoką wydajność, używany jest kompilator JIT, który w locie konwertuje instrukcje źródłowe na kod maszynowy dla platformy docelowej (do tej pory tylko x86_64 i aarch64 obsługują JIT).

Obsługiwane jest bezpośrednie uruchamianie na emulatorze plików wykonywalnych w formatach ELF, PE (Portable Executables) i bin (Flat Executable), skompilowanych ze standardowymi bibliotekami C Cosmopolitan, Glibc i Musl.

Poza tym, Wyróżnia się również tym, że ma zintegrowaną obsługę ponad stu wywołań do systemu Linux, w tym fork() i clone(). Obsługiwana jest emulacja zestawów instrukcji i8086, i386, SSE2, x86_64, SSE3, SSSE3, CLMUL, POPCNT, ADX, BMI2 (MULX, PDEP, PEXT), X87, RDRND, RDSEED i RDTSCP.

Ponadto, projekt rozwija narzędzie blinkenlights, który zapewnia interfejs do debugowania programów na różnych platformach, wizualizacji wykonywania programów i analizowania zawartości pamięci. Cechą debuggera jest obsługa trybu odwrotnego debugowania (Reverse Debugging), który umożliwia cofnięcie się w historii wykonania i powrót do wcześniej wykonanego punktu.

blinkenlights to interfejs TUI, którego można używać do debugowania programów x86_64-linux na wszystkich platformach. W przeciwieństwie do GDB, Blinkenlights koncentruje się na wizualizacji wykonania programu. Wykorzystuje znaki UNICODE IBM Code Page 437 do wyświetlania paneli pamięci binarnej, które zmieniają się w miarę poruszania się po kodzie asemblera programu. Te panele pamięci można przewijać i powiększać za pomocą kółka myszy. Blinkenlights obsługuje również odwrotne debugowanie, w którym przewijanie koła na ekranie montażu umożliwia przewinięcie historii wykonania.

Wreszcie, ci, którzy chcą dowiedzieć się więcej o tym projekcie, powinni wiedzieć, że kod projektu jest napisany w C (ANSI C11) i jest rozpowszechniany na licencji ISC. Z zależności wymagana jest tylko biblioteka libc (POSIX.1-2017).

mignąć

Ci, którzy są zainteresowani możliwością spróbowania mrugnięcia, powinni wiedzieć, że jego kompilacja jest niezwykle prosta, muszą tylko uzyskać jego kod źródłowy, mogą to zrobić z następującego linku lub z terminala, wpisując następujące polecenie :

git https://github.com/jart/blink.git

I gotowe, wystarczy wejść do katalogu blik i skompilować:

cd blink

make -j4

Jeśli chcesz dowiedzieć się więcej o tym, jak działa Blink, możesz to zrobić z następujący link.


Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: AB Internet Networks 2008 SL
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.