Neseniai pasklido žinia, kad projektas Blink kuria naują emuliatorių x86-64 procesoriaus leidžia paleisti sukompiliuotas Linux programas statiškai virtualioje mašinoje su emuliuotu procesoriumi.
Minima, kad epagrindinis tikslas projekto yra suteikti galimybę paleisti Linux programas, sudarytas x86-64 architektūrai kitose operacinėse sistemose („MacOS“, „FreeBSD“, „NetBSD“, „OpenBSD“) ir kompiuteriuose su skirtinga aparatinės įrangos architektūra (x86, ARM, RISC-V, MIPS, PowerPC, s390x).
Projekto saugykloje jie apibūdina mirksėjimą taip:
blink yra virtuali mašina, kuri paleidžia statiškai kompiliuotas x86-64-Linux programas skirtingose operacinėse sistemose ir aparatinės įrangos architektūrose. Jis sukurtas atlikti tą patį veiksmą, kaip ir komanda qemu-x86_64, išskyrus tai, kad (a) užuot 4mb dvejetainis, Blink turi tik ~160kb pėdsaką; ir (b) Blink yra 2 kartus greitesnis nei Qemu kai kuriuose etalonuose, pvz., emuliuojant GCC. Kompromisas yra tas, kad „Blink“ neturi tiek daug funkcijų kaip „Qemu“. Blink puikiai tinka, kai norite virtualios mašinos, kuri būtų itin maža ir kur kas greičiau vykdytų trumpalaikes programas. Norėdami gauti daugiau informacijos apie šio įrankio motyvus, skaitykite https://justine.lol/ape.html.
Verta paminėti, kad projektą sukūrė tokių pokyčių kaip „Cosmopolitan C“ biblioteka, „Linux“ įsipareigojimų izoliavimo mechanizmo prievadas ir „Redbean“ universali vykdomųjų failų sistema, autorius.
Kalbant apie funkcionalumą, Mirksėjimas atrodo kaip komanda qemu-x86_64, bet skiriasi nuo QEMU kompaktiškesniu dizainu ir žymiai padidintu našumu. Pavyzdžiui, Blink vykdomasis failas yra tik 157 KB, o ne 4 MB qemu-x86_64, ir našumo požiūriu bandomajame paleidime GCC emuliatoriuje, Blink du kartus įveikia QEMU.
Norėdami užtikrinti aukštą našumą, naudojamas JIT kompiliatorius, kuri konvertuoja šaltinio instrukcijas į tikslinės platformos mašininį kodą (iki šiol JIT palaiko tik x86_64 ir aarch64).
Palaikomas tiesioginis ELF, PE (Portable Executable) ir bin (Flat Executable) formatų vykdomųjų failų, sudarytų su standartinėmis C bibliotekomis Cosmopolitan, Glibc ir Musl, paleidimas.
Neskaitant to, Jis taip pat išsiskiria tuo, kad turi integruotą palaikymą daugiau nei šimtui skambučių į „Linux“ sistemą, įskaitant fork() ir clone(). Palaikoma i8086, i386, SSE2, x86_64, SSE3, SSSE3, CLMUL, POPCNT, ADX, BMI2 (MULX, PDEP, PEXT), X87, RDRND, RDSEED ir RDTSCP instrukcijų rinkinių emuliacija.
Be to, projekte kuriama blinkenlights programa, kuri suteikia sąsają programoms įvairiose platformose derinti, programos vykdymui vizualizuoti ir atminties turiniui analizuoti. Derinimo priemonė yra atvirkštinio derinimo režimo (atvirkštinio derinimo) palaikymas, leidžiantis grįžti į vykdymo istoriją ir grįžti į anksčiau vykdytą tašką.
Aš: koks mažas gali būti emuliatorius?
Blink: Taip.#Blink #žvangėjimas #GCC # įsilaužimas pic.twitter.com/75iUIQN6Wn– 0xHiro (ヒロ) (@0x1hiro) Sausis 4, 2023
blinkenlights yra TUI sąsaja, kurią galima naudoti x86_64-linux programoms derinti visose platformose. Skirtingai nei GDB, „Blinkenlights“ daugiausia dėmesio skiria programos vykdymo vizualizavimui. Jame naudojami UNICODE IBM kodo simboliai, kad būtų rodomos dvejetainės atminties plokštės, kurios keičiasi judant per programos surinkimo kodą. Šias atminties plokštes galima slinkti ir padidinti pelės ratuku. „Blinkenlights“ taip pat palaiko atvirkštinį derinimą, kai slenkant ratuku surinkimo ekrane galima atsukti vykdymo istoriją.
Galiausiai, norintys sužinoti daugiau apie šį projektą, jie turėtų žinoti, kad projekto kodas parašytas C (ANSI C11) ir platinamas pagal ISC licenciją. Iš priklausomybių reikalingas tik libc (POSIX.1-2017).
mirksėti
Tie, kurie domisi galimybe išbandyti blink, turėtų žinoti, kad jo kompiliavimas yra labai paprastas, tereikia gauti šaltinio kodą, tai gali padaryti iš šios nuorodos arba iš terminalo įvesdami šią komandą :
git https://github.com/jart/blink.git
Baigę tai, tereikia įvesti blik katalogą ir sukompiliuoti:
cd blink make -j4
Jei norite sužinoti daugiau apie tai, kaip veikia Blink, galite tai padaryti iš sekanti nuoroda.