Blink een x86-64-emulator die belooft QEMU te overtreffen

blink-gcc

Screenshot van knipperende werking

Het nieuws brak onlangs dat het project Blink ontwikkelt een nieuwe emulator van x86-64-processor dat stelt je in staat om gecompileerde Linux-applicaties uit te voeren statisch in een virtuele machine met een geëmuleerde processor.

Er wordt vermeld dat ehet hoofddoel van het project is om de mogelijkheid te bieden om Linux-programma's uit te voeren die zijn gecompileerd voor de x86-64-architectuur op andere besturingssystemen (macOS, FreeBSD, NetBSD, OpenBSD) en op computers met een andere hardware-architectuur (x86, ARM, RISC-V, MIPS, PowerPC, s390x).

In de projectrepository beschrijven ze knipperen als volgt:

blink is een virtuele machine die statisch gecompileerde x86-64-linux-programma's uitvoert op verschillende besturingssystemen en hardware-architecturen. Het is ontworpen om hetzelfde te doen als de opdracht qemu-x86_64, behalve dat (a) in plaats van een 4mb binair bestand te zijn, Blink slechts een voetafdruk van ~160kb heeft; en (b) Blink is 2x sneller dan Qemu in sommige benchmarks, zoals het emuleren van GCC. De wisselwerking is dat Blink niet zoveel functies heeft als Qemu. Blink past perfect wanneer u een virtuele machine wilt die extreem klein is en kortstondige programma's veel sneller uitvoert. Lees https://justine.lol/ape.html voor meer informatie over de motivaties voor deze tool.

Het is vermeldenswaard dat het project is ontwikkeld door de auteur van ontwikkelingen zoals de Cosmopolitan C-bibliotheek, een port van het commitment-isolatiemechanisme voor Linux en het universele uitvoerbare bestandssysteem Redbean.

Qua functionaliteit, Blink lijkt op het commando qemu-x86_64Maar verschilt van QEMU in een compacter ontwerp en een aanzienlijke prestatieverbetering. Het uitvoerbare bestand Blink is bijvoorbeeld slechts 157 KB in plaats van 4 MB voor qemu-x86_64, en in termen van prestaties in de testrun op de GCC-emulator, Blink verslaat QEMU tweemaal.

Om hoge prestaties te garanderen, een JIT-compiler wordt gebruikt, die broninstructies direct converteert naar machinecode voor het doelplatform (tot nu toe ondersteunen alleen x86_64 en aarch64 JIT).

Directe lancering op de emulator van uitvoerbare bestanden in ELF-, PE- (Portable Executables) en bin- (Flat Executable) formaten, gecompileerd met de standaard C-bibliotheken Cosmopolitan, Glibc en Musl wordt ondersteund.

Daarnaast, Het valt ook op dat het geïntegreerde ondersteuning heeft voor meer dan honderd oproepen naar het Linux-systeem, inclusief fork() en clone(). Emulatie van de instructiesets i8086, i386, SSE2, x86_64, SSE3, SSSE3, CLMUL, POPCNT, ADX, BMI2 (MULX, PDEP, PEXT), X87, RDRND, RDSEED en RDTSCP wordt ondersteund.

Bovendien heeft het project ontwikkelt het hulpprogramma blinkenlights, die een interface biedt voor het debuggen van programma's op verschillende platforms, het visualiseren van de uitvoering van programma's en het analyseren van geheugeninhoud. Een kenmerk van de debugger is ondersteuning voor reverse debugging-modus (Reverse Debugging), waarmee u terug kunt gaan in de uitvoeringsgeschiedenis en kunt terugkeren naar een eerder uitgevoerd punt.

blinkenlights is een TUI-interface die kan worden gebruikt om x86_64-linux-programma's op alle platforms te debuggen. In tegenstelling tot GDB richt Blinkenlights zich op het visualiseren van de uitvoering van het programma. Het gebruikt UNICODE IBM Code Page 437-tekens om binaire geheugenpanelen weer te geven, die veranderen terwijl u door de assembleercode van uw programma gaat. Deze geheugenpanelen kunnen worden gescrolld en vergroot met het muiswiel. Blinkenlights ondersteunt ook reverse debugging, waarbij u door met het wiel op het montagescherm te scrollen de uitvoeringsgeschiedenis kunt terugspoelen.

Tot slot, voor diegenen die meer willen weten over dit project, moeten ze weten dat de projectcode is geschreven in C (ANSI C11) en wordt gedistribueerd onder de ISC-licentie. Van de afhankelijkheden is alleen libc (POSIX.1-2017) vereist.

knipper

Voor degenen die geïnteresseerd zijn om knipperen te kunnen proberen, ze moeten weten dat de compilatie uiterst eenvoudig is, ze hoeven alleen de broncode ervan te verkrijgen, ze kunnen het doen via de volgende link of vanaf een terminal door de volgende opdracht te typen :

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

En daarmee klaar, je hoeft alleen maar de blik-directory in te voeren en te compileren:

cd blink

make -j4

Als je meer wilt weten over hoe Blink werkt, kun je dat doen vanaf de volgende link.


Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: AB Internet Networks 2008 SL
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.