Lëshimi i bibliotekës standarde C Cosmopolitan 2.0, e zhvilluar për skedarë ekzekutivë portativë.

Ël mallkuar i projektit Cosmopolitan 2.0 është publikuar, i cili po zhvillon bibliotekën standarde C dhe formatin universitar të skedarëve ekzekutivë, i cili mund të përdoret për shpërndarjen e programeve për sisteme të ndryshme operative pa përdorur interpreterë dhe makina virtuale. Rezultati i marrë përmes kompilimit në GCC dhe Clang komponohet në një skedar ekzekutiv universitar që mund të startohet në çdo distribucion të Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD dhe madje edhe të thirret nga BIOS. Kodi i projektit shpërndahet nën licencën ISC (version i thjeshtuar i MIT/BSD).

Kontejneri për formimin e skedarëve ekzekutivë universitarë është i bazuar në kombinimin e segmenteve të specifikës për sisteme të ndryshme operative dhe titujve (PE, ELF, MACHO, OPENBSD) në një skedar, duke kombinuar në të disa formate të ndryshme të përdorura në Unix, Windows dhe macOS. Për të siguruar startimin e një skedari ekzekutiv në Windows dhe sistemet Unix, përdoret një truk i lidhur me kodimin e skedarëve Windows PE në formën e një skedari shell, duke përfituar nga fakti se Thompson Shell nuk përdor shenjën e skedareve "#!". Për krijimin e programeve që përfshijnë disa skedare (kombinimi i të gjitha burimeve në një skedar), mbështetet formimi i skedarit ekzekutiv në formën e një arkivi ZIP të formatuar në mënyrë speciale. Skema e formatit të propozuar (shembulli i aplikacionit 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…

Fillimisht në skedar jepet një etiketë «MZqFpD», e cila përceptohet si një titull format Windows PE. Kjo sekuencë gjithashtu dekodohet në udhëzimin «pop %r10 ; jno 0x4a ; jo 0x4a», ndërsa vargu «\177ELF» në udhëzimin «jg 0x47», të cilat përdoren për kalimin në pikën e hyrjes. Në sistemet Unix ekzekutohet kodi shell, në të cilin përdoret komanda exec me transmetimin e kodit ekzekutiv përmes një kanali të paemëruar. Kufizimi i metodës së propozuar është mundësia e ekzekutimit në OS të ngjashëm me Unix vetëm duke përdorur shell-e që mbështesin përputhjen me Thompson Shell.

Thirrja e qemu-x86_64 parashikohet për realizimin e portabilitetit shtesë dhe lejon ekzekutimin e kodit të kompiluar për arkitekturën x86_64 në platformat që nuk janë x86, për shembull, në pllakëza Raspberry Pi dhe pajisje Apple që janë të përfshira me procesorë ARM. Projekti gjithashtu mund të përdoret për krijimin e aplikacioneve të vetë-mjaftueshme, të cilat funksionojnë pa sistem operativ (bare metal). Në këto aplikacione, një ngarkues i bashkëngjitet skedarit ekzekutiv, dhe programi shërben si një sistem operativ i ngarkueshëm.

Në bibliotekën standarde C libc që po zhvillohet nga projekti janë propozuar 2024 funksione (në lëshimin e parë ishin rreth 1400 funksione). Për nga performanca, Cosmopolitan punon po aq shpejt sa glibc dhe përshpejton dukshëm Musl dhe Newlib, ndërsa Cosmopolitan është me një rend kodimi më të vogël se glibc dhe përafërsisht përputhet me Musl dhe Newlib. Për optimizimin e funksioneve që thirren shpesh si memcpy dhe strlen, përdoret gjithashtu teknika e "trickle-down performance", ku për thirrjen e funksionit përdoret një makro-mbështetje, në të cilin kompileri informohet për regjistrat e CPU të angazhuar në procesin e ekzekutimit të kodit, që lejon kursimin e burimeve duke ruajtur gjendjen e CPU përmes ruajtjes vetëm të regjistrave të ndryshueshëm.

Ndryshimet në publikimin e ri përfshijnë:

  • Ka ndryshuar skema e qasjes në burimet e brendshme brenda skedarit zip (kur hapen skedarët tani përdoren rrugë të zakonshme \/zip\… në vend të qasjes sipas prefiksit zip:..). Po ashtu, për aksesin në disqet në Windows është ofruar mundësia e përdorimit të rrugëve të tipit «\/c\/…» në vend të «C:\…».
  • Është propozuar një ngarkues i ri APE (Actually Portable Executable), i cili përcakton formatin e skedarëve universitarë ekzekutivë. Ngarkuesi i ri përdor mmap për vendosjen e programit në kujtesë dhe nuk ndryshon më përmbajtjen në kohë reale. Nëse është e nevojshme, skedari ekzekutiv universitar mund të konvertohet në skedarë ekzekutivë të zakonshëm të lidhur me platforma të veçanta.
  • Në platformën Linux është zbatuar mundësia e përdorimit të modulit të bërthamës binfmt_misc për ekzekutimin e programeve APE. Vihet në dukje se përdorimi i binfmt_misc është metoda më e shpejtë për ekzekutim.
  • Për Linux është propozuar implementimi i funksionalitetit të thirrjeve sistemike pledge() dhe unveil(), që janë duke u zhvilluar nga projekti OpenBSD. Ofrohet një API për përdorimin e këtyre thirrjeve në programe në gjuhët C, C++, Python dhe Redbean, si dhe një utilitet pledge.com për izolimin e proceseve të rastit.
  • Për ndërtimin përdoret utilita Landlock Make — një version i GNU Make me kontroll më të fortë të varësive dhe përdorimin e thirrjes sistemore Landlock për të izoluar programin nga pjesa tjetër e sistemit dhe për të rritur efikasitetin e caching. Siopsion, është ruajtur mundësia e ndërtimit me GNU Make të zakonshëm.
  • Janë implementuar funksione për shumëthirrje — _spawn() dhe _join(), që përfaqësojnë mbështetje universale për API të ndryshme specifike për sistemet operative. Po ashtu, po punohet për implementimin e mbështetjes për POSIX Threads.
  • Është ofruar mundësia e përdorimit të fjalës kyçe _Thread_local për të përdorur depo të veçanta për çdo fije (TLS, Thread-Local Storage). Nga e para, runtime C inicializon TLS për fijen kryesore, e cila ka çuar në rritjen e madhësisë minimale të skedarit të ekzekutueshëm nga 12 në 16 KB.
  • Në skedarët e ekzekutueshëm është shtuar mbështetje për parametrat ‘—ftrace’ dhe ‘—strace’ për të prodhuar në stderr informacion mbi të gjitha thirrjet e funksioneve dhe thirrjet sistemore.
  • Është shtuar mbështetje për thirrjen sistemore closefrom(), e mbështetur në Linux 5.9+, FreeBSD 8+ dhe OpenBSD.
  • Në platformën Linux është rritur deri në 10 herë performanca e thirrjeve clock_gettime dhe gettimeofday për shkak të përdorimit të mekanizmit vDSO (virtual dynamic shared object), i cili lejon që menaxheri i thirrjes sistemore të transferohet në hapësirën e përdoruesit dhe të shmangë ndryshimet e kontekstit.
  • Janë transferuar funksionet matematikore nga biblioteka Musl për punën me numra kompleksë. Performanca e shumë funksioneve matematikore është përmirësuar.
  • Është propozuar funksioni nointernet(), që çjerr mundësitë rrjetore.
  • Janë shtuar funksione të reja për bashkimin efikas të vargjeve: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf dhe vappendf.
  • Është shtuar një variant i mbrojtur i familjes së funksioneve kprintf(), i destinuar për t'u përdorur nën privilegje të rritura.
  • Performanca e implementimeve është rritur ndjeshëm SSL, SHA, curve25519 dhe RSA.

Burimi: opennet.ru

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster