Nedavno je objavljena vijest da je projekat Blink razvija novi emulator od x86-64 procesora koji omogućava vam pokretanje kompajliranih Linux aplikacija statički u virtuelnoj mašini sa emuliranim procesorom.
Spominje se da je eglavni cilj projekta je pružiti mogućnost pokretanja Linux programa kompajliranih za x86-64 arhitekturu na drugim operativnim sistemima (macOS, FreeBSD, NetBSD, OpenBSD) i na računarima sa različitom hardverskom arhitekturom (x86, ARM, RISC-V, MIPS, PowerPC, s390x).
U repozitorijumu projekta oni opisuju treptanje na sledeći način:
blink je virtuelna mašina koja pokreće statički kompajlirane x86-64-linux programe na različitim operativnim sistemima i hardverskim arhitekturama. Dizajniran je da radi istu stvar kao naredba qemu-x86_64, osim što (a) umjesto da bude binarni fajl od 4 MB, Blink ima samo ~160 kb otisak; i (b) Blink je 2x brži od Qemu-a u nekim mjerilima, kao što je emulacija GCC-a. Kompromis je u tome što Blink nema toliko funkcija kao Qemu. Blink savršeno odgovara kada želite virtuelnu mašinu koja je izuzetno mala i koja mnogo brže pokreće efemerne programe. Za više detalja o motivaciji za ovaj alat, pročitajte https://justine.lol/ape.html.
Vrijedi spomenuti da je projekat razvio autor razvoja kao što je Cosmopolitan C biblioteka, port mehanizma izolacije obaveza za Linux i Redbean univerzalni izvršni sistem datoteka.
Što se tiče funkcionalnosti, Blink izgleda kao naredba qemu-x86_64, ali razlikuje se od QEMU po kompaktnijem dizajnu i značajnom povećanju performansi. Na primjer, izvršna datoteka Blink je samo 157 KB umjesto 4 MB za qemu-x86_64, i u smislu performansi u probnom radu na GCC emulatoru, Blink dvaput pobjeđuje QEMU.
Da biste osigurali visoke performanse, koristi se JIT kompajler, koji konvertuje izvorne instrukcije u mašinski kod za ciljnu platformu u hodu (do sada samo x86_64 i aarch64 podržavaju JIT).
Podržano je direktno pokretanje na emulatoru izvršnih datoteka u ELF, PE (Portable Executables) i bin (Flat Executable) formatima, kompajlirano sa standardnim C bibliotekama Cosmopolitan, Glibc i Musl.
Pored toga, Takođe se ističe da ima integrisanu podršku za više od sto poziva na Linux sistem, uključujući fork() i clone(). Podržana je emulacija i8086, i386, SSE2, x86_64, SSE3, SSSE3, CLMUL, POPCNT, ADX, BMI2 (MULX, PDEP, PEXT), X87, RDRND, RDSEED i RDTSCP skupova instrukcija.
Takođe, projekat razvija uslužni program blinkenlights, koji pruža interfejs za otklanjanje grešaka u programima na različitim platformama, vizualizaciju izvršavanja programa i analizu memorijskog sadržaja. Karakteristika debugger-a je podrška za režim obrnutog otklanjanja grešaka (Reverse Debugging), koji vam omogućava da se vratite u istoriju izvršavanja i vratite se na prethodno izvršenu tačku.
Ja: Koliko mali može biti emulator?
Blink: Da.#Blink #clang #GCC #hacking pic.twitter.com/75iUIQN6Wn— 0xHiro (ヒロ) (@0x1hiro) Januar 4, 2023
blinkenlights je TUI interfejs koji se može koristiti za otklanjanje grešaka x86_64-linux programa na svim platformama. Za razliku od GDB-a, Blinkenlights se fokusira na vizualizaciju izvršavanja programa. Koristi UNICODE IBM Code Page 437 znakove za prikaz binarnih memorijskih panela, koji se mijenjaju kako se krećete kroz asemblerski kod vašeg programa. Ovi memorijski paneli se mogu pomicati i povećavati pomoću kotačića miša. Blinkenlights takođe podržava obrnuto otklanjanje grešaka, gde vam pomeranje točkića na ekranu sklopa omogućava da premotate istoriju izvršenja unazad.
Konačno, za one koji su zainteresovani da saznaju više o ovom projektu, trebalo bi da znaju da je kod projekta napisan u C (ANSI C11) i da se distribuira pod ISC licencom. Od zavisnosti, potrebna je samo libc (POSIX.1-2017).
dobiti blink
Za one koji su zainteresirani da mogu isprobati blink, trebali bi znati da je njegova kompilacija izuzetno jednostavna, samo moraju dobiti izvorni kod, mogu to učiniti sa sljedećeg linka ili sa terminala upisivanjem sljedeće naredbe :
git https://github.com/jart/blink.git
I završili s tim, samo morate ući u blik direktorij i kompajlirati:
cd blink make -j4
Ako želite da saznate više o tome kako Blink radi, možete to učiniti na stranici sljedeći link.