Cosmopolitan 2.0 standardne C-raamatukogu vĂ€ljaanne, mida arendatakse ĂŒlekantavate tĂ€itmisfailide jaoks

Avaldamiseks on vĂ€lja antud Cosmopolitan 2.0 projekt, mis arendab vĂ€lja standardset C-raamatukogu ning universaalse tĂ€itmisfaili formaadi, mida saab kasutada programmide levitamiseks erinevatele operatsioonisĂŒsteemidele ilma tĂ”lkijate ja virtuaalmasinate kasutamiseta. GCC ja Clang'i abil kompileeritud tulemus koondatakse staatiliselt siduvasse universaalsesse tĂ€itmisfaili, mis sobib kĂ€ivitamiseks kĂ”ikides Linuxi, macOS, Windows, FreeBSD, OpenBSD, NetBSD ja isegi BIOS-ist otse kutsumiseks. Projekti kood levitatakse ISC litsentsi alusel (lihtsustatud MIT/BSD versioon).

Universaalsete tĂ€itmisfailide koostamise konteiner pĂ”hineb erinevate operatsioonisĂŒsteemide spetsiifiliste segmentide ja pealkirjade (PE, ELF, MACHO, OPENBSD) ĂŒhendamisel ĂŒhes failis, kombineerides mitmeid erinevaid formaate, mida kasutatakse Unixis, Windowsis ja macOS-is. Ühe tĂ€itmisfaili kĂ€ivitamiseks Windowsis ja Unix-sĂŒsteemides kasutatakse trikki, mis seisneb Windows PE failide kodeerimises shellskripti kujul, kasutades Ă€ra asjaolu, et Thompson Shell ei kasuta skripti markerit "#!". Mitme faili ĂŒhendamiseks (kĂ”igi ressursside koondamine ĂŒhte faili) toetatakse tĂ€itmisfaili loomist spetsiaalselt vormindatud ZIP-arhiivina. Pakutava formaadi skeem (nĂ€iteks rakendus hello.com):

MZqFpD=’ BIOS BOOT SECTOR’ exec 7 $(command -v $0) printf ‘\177ELF
LINKER-ENCODED-FREEBSD-HEADER’ >&7 exec "$0" "$@" exec qemu-x86_64 "$0" "$@" exit 1 REAL MODE
 ELF SEGMENTS
 OPENBSD NOTE
 MACHO HEADERS
 CODE AND DATA
 ZIP DIRECTORY


Faili alguses on mĂ€rgistus „MZqFpD“, mida tĂ”lgendatakse Windows PE formaadi pealkirjana. See jada dekodeeritakse ka juhiseks „pop %r10 ; jno 0x4a ; jo 0x4a“, ning string „\177ELF“ juhiseks „jg 0x47“, mida kasutatakse sissepÀÀsupunkti edastamiseks. Unix-sĂŒsteemides tĂ€idetakse shell-kood, kus kasutatakse exec kĂ€sku, edastades tĂ€itmise koodi nimetu kanaliga. Pakutud meetodi piiranguks on vĂ”imalus kĂ€ivitada ainult Unix-taolistes OS-ides kasutades shelle, mis toetavad Thompson Shell ĂŒhilduvust.

qemu-x86_64 kutset on ette nĂ€htud tĂ€iendava kaasavĂ”imekuse rakendamiseks ja vĂ”imaldab x86_64 arhitektuurile koostatud koodi kĂ€ituda platvormidel, mis erinevad x86-st, nĂ€iteks Raspberry Pi plaatidel ja Apple seadmetes, mis on varustatud ARM protsessoritega. Projekti saab kasutada ka iseseisvate rakenduste loomiseks, mis töötavad ilma operatsioonisĂŒsteemita (bare metal). Sellistes rakendustes ĂŒhendatakse tĂ€idetav fail kĂ€ivitusprogrammiga ning programm toimib laaditava operatsioonisĂŒsteemina.

Arendatavas projekti standardse C-keskkonna libc raamatukogus on ette nĂ€htud 2024 funktsiooni (esimeses versioonis oli umbes 1400 funktsiooni). Cosmotopolitan töötab jĂ”udluses sama kiiresti nagu glibc ja ĂŒletab selgelt Musl ja Newlib, samas kui Cosmopolitan on koodimahtult glibc-st kĂŒmneid kordi vĂ€iksem ja vastab umbkaudu Musl ja Newlib suurusele. Tihedalt kutsutud funktsioonide, nagu memcpy ja strlen, optimeerimiseks kasutatakse tĂ€iendavat "trickle-down performance" tehnikat, kus funktsiooni kutsumiseks rakendatakse makro-töötlust, mis teavitab kompileerijat, millised CPU registrid on koodide tĂ€itmisel aktiivsed, mis vĂ”imaldab ressursse sÀÀsta CPU oleku sĂ€ilitamise ajal, salvestades ainult muudetud registrid.

Among the changes in the new release:

  • Zip-faili sisemistele ressurssidele juurdepÀÀsu skeem on muudetud (failide avamisel kasutatakse nĂŒĂŒd tavalisi teid /zip/
 asemel zip:.. prefiksiga). Sarnaselt on Windowsi ketastele juurdepÀÀsuks antud vĂ”imalus kasutada teid, nagu "\/c\/
" asemel "C:\
".
  • Esitatud on uus APE (Actually Portable Executable) kĂ€ivitusprogramm, mis mÀÀratleb universaalsete tĂ€idetavate failide formaadi. Uus kĂ€ivitusprogramm kasutab programmi mĂ€lu paigutamiseks mmap'i ja ei muuda sisu jooksvalt. Vajadusel saab universaalse tĂ€idetava faili konverteerida tavalisteks tĂ€idetavateks failideks, mis on seotud konkreetselte platvormidega.
  • Linuxi platvormil on rakendatud vĂ”imalus kasutada binfmt_misc tuuma moodulit APE-programmide kĂ€itamiseks. MĂ€rgitakse, et binfmt_misc kasutamine on kĂ”ige kiirem meetod kĂ€ivitamiseks.
  • Linuxile on pakutud sĂŒsteemikĂ”nede pledge() ja unveil() funktsionaalsuse teostus, mida arendab OpenBSD projekt. Pakutakse API-d nende kĂ”nede kasutamiseks C, C++, Python ja Redbean keeles, samuti tööriista pledge.com, mis isoleerib suvalisi protsesse.
  • Kogumise jaoks kasutatakse Landlock Make tööriista — GNU Make redaktsiooni, kus on rangem sĂ”ltuvuse kontroll ja Landlock sĂŒsteemikĂ”ne kasutamine, et isolatsioon programmi ja sĂŒsteemi vahel oleks tĂ”husam ning kassi efektiivsem. Tavalise GNU Make kogumise vĂ”imalused on sĂ€ilitatud.
  • Rakendatud on mitme lĂ”ime funktsioonid — _spawn() ja _join(), mis on universaalsed pakendid erinevate operatsioonisĂŒsteemide spetsiaalsete API-de kohal. Tööd tehakse ka POSIX lĂ”ime toe rakendamise nimel.
  • Pakutud on _Thread_local mĂ€rksĂ”na kasutamise vĂ”imalus, et kasutada iga lĂ”ime jaoks eraldi salvestusi (TLS, Thread-Local Storage). Vaikimisi initsialiseerib C runtime TLS pĂ”hijoonel, mis tĂ”i kaasa kĂ€ivitatava faili minimaalse suuruse suurenemise 12KB-lt 16KB-le.
  • KĂ€ivitatavates failides on lisatud toetus parameetritele „—ftrace“ ja „—strace“, et stderr-s vĂ€lja tuua teavet kĂ”igi funktsioonide ja sĂŒsteemikĂ”nede kohta.
  • Lisatud on sĂŒsteemikĂ”ne closefrom(), mida toetatakse Linux 5.9+, FreeBSD 8+ ja OpenBSD-s.
  • Linuxi platvormil on clock_gettime ja gettimeofday sĂŒsteemikĂ”nede jĂ”udlust tĂ”hustatud kuni 10 korda, kasutades vDSO (virtual dynamic shared object) mehhanismi, mis vĂ”imaldab sĂŒsteemikĂ”ne töötlejat kasutajaruumi ĂŒle kanda ja vĂ€ltida konteksti vahetamist.
  • Musl raamatukogust on koostatud matemaatilisi funktsioone, mis töötavad kompleksnumberitega. Paljusid matemaatilisi funktsioone on kiirendatud.
  • Pakutud on nointernet() funktsioon, mis keelab vĂ”rguvĂ”imalused.
  • Lisatud on uued funktsioonid tĂ”husaks stringide juurde lisamiseks: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf ja vappendf.
  • Lisatud on kaitstud variant kprintf() funktsioonide perekonnast, mis on mĂ”eldud töötamiseks kĂ”rgendatud privileegide korral.
  • Rakenduste jĂ”udlust on oluliselt parendatud. SSL, SHA, curve25519 ja RSA.

Allikas: opennet.ru

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster