Release av standard C-biblioteket Cosmopolitan 2.0, utvecklat för bÀrbara körbara filer

Projektet Cosmopolitan 2.0, som utvecklar ett standardbibliotek i C och ett universellt körbart format som kan anvÀndas för att distribuera program över olika operativsystem utan behov av tolkar eller virtuella maskiner, har slÀppts. Kompilering med GCC och Clang resulterar i en statiskt lÀnkad universell körbar fil som kan köras pÄ vilken distribution som helst. Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD och till och med BIOS-Ätkomst. Projektets kod distribueras under ISC-licensen (en förenklad version av MIT/BSD-licensen).

BehÄllaren för att skapa universella körbara filer Àr baserad pÄ att kombinera segment och rubriker (PE, ELF, MACHO, OPENBSD) specifika för olika operativsystem i en fil, och kombinera flera olika format som anvÀnds i Unix, Windows О macOSFör att sÀkerstÀlla att en körbar fil kan startas i Windows och Unix-system anvÀnder ett trick relaterat till filkodning Windows PE som ett shellskript, vilket utnyttjar Thompson Shells avsaknad av skriptmarkören "#!". För att skapa program som innehÄller flera filer (kombinera alla resurser till en enda fil) kan den körbara filen skapas som ett specialformaterat ZIP-arkiv. Det föreslagna formatet (exempel: hello.com-applikation):

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 SEGMENT... OPENBSD OBS... MACHO HEADERS...KOD OCH DATA...ZIP-KATALOG...

I början av filen anges etiketten "MZqFpD", vilket uppfattas som formathuvudet Windows PE. Denna sekvens avkodas ocksÄ till instruktionen "pop %r10; jno 0x4a; jo 0x4a" och strÀngen "\177ELF" till instruktionen "jg 0x47", vilka anvÀnds för omdirigering till startpunkten. PÄ Unix-system exekveras skalkod med hjÀlp av exec-kommandot, varvid den exekverbara koden skickas genom en namnlös pipe. En begrÀnsning med den föreslagna metoden Àr att den bara kan köras pÄ Unix-liknande operativsystem som anvÀnder skal som stöder Thompson Shell-kompatibilitetslÀge.

Anropet qemu-x86_64 tillhandahÄlls för ytterligare portabilitet, vilket gör att kod som kompilerats för x86_64-arkitekturen kan köras pÄ icke-x86-plattformar, sÄsom Raspberry Pi-kort och Apple-enheter utrustade med ARM-processorer. Projektet kan ocksÄ anvÀndas för att skapa fristÄende applikationer som körs utan operativsystem (bare metal). I sÄdana applikationer Àr en bootloader kopplad till den körbara filen, och programmet fungerar som ett startbart operativsystem.

Standardbiblioteket libc, som utvecklats av projektet, erbjuder 2024 funktioner (den första utgÄvan hade cirka 1400 funktioner). PrestandamÀssigt fungerar Cosmopolitan lika snabbt som glibc och ligger mÀrkbart före Musl och Newlib, trots att Cosmopolitan Àr en storleksordning mindre Àn glibc i kodstorlek och Àr ungefÀr lika med Musl och Newlib. För att optimera ofta anropade funktioner som memcpy och strlen anvÀnds dessutom "trickle-down performance"-tekniken, dÀr en makrobindning anvÀnds för att anropa en funktion, dÀr kompilatorn informeras om de CPU-register som Àr involverade i kodkörningen, vilket gör det möjligt att spara resurser samtidigt som CPU-tillstÄndet bibehÄlls genom att endast de Àndringsbara registren sparas.

Bland Àndringarna i den nya utgÄvan:

  • Hur interna resurser nĂ„s i en zip-fil har Ă€ndrats (nĂ€r filer öppnas anvĂ€nds nu de vanliga sökvĂ€garna /zip/
 istĂ€llet för att nĂ„ dem med prefixet zip:..). PĂ„ liknande sĂ€tt Ă€r Ă„tkomst till diskar i Windows Möjligheten att anvĂ€nda sökvĂ€gar som "/c/..." istĂ€llet för "C:/..." har introducerats.
  • En ny APE-laddare (Actually Portable Executable) har föreslagits, som definierar formatet för universella körbara filer. Den nya laddaren anvĂ€nder mmap för att placera programmet i minnet och Ă€ndrar inte lĂ€ngre innehĂ„llet i farten. Vid behov kan den universella körbara filen konverteras till vanliga körbara filer kopplade till enskilda plattformar.
  • PĂ„ plattformen Linux Möjligheten att anvĂ€nda kĂ€rnmodulen binfmt_misc för att starta APE-program har implementerats. Det bör noteras att binfmt_misc Ă€r den snabbaste startmetoden.
  • för Linux En implementering av systemanropen pledge() och unveil() som utvecklats av OpenBSD-projektet föreslĂ„s. Ett API tillhandahĂ„lls för att anvĂ€nda dessa anrop i C-, C++-, Python- och Redbean-program, samt verktyget pledge.com för att isolera godtyckliga processer.
  • Verktyget Landlock Make anvĂ€nds för assembler — en version av GNU Make med en strĂ€ngare beroendekontroll och anvĂ€ndningen av Landlock-systemanropet för att isolera programmet frĂ„n resten av systemet och förbĂ€ttra cachningseffektiviteten. Möjligheten att bygga med vanlig GNU Make behĂ„lls som ett alternativ.
  • Funktioner för multitrĂ„dning har implementerats — _spawn() och _join(), vilka Ă€r universella bindningar över API:er specifika för olika operativsystem. Arbete pĂ„gĂ„r ocksĂ„ för att implementera stöd för POSIX-trĂ„dar.
  • Möjligheten att anvĂ€nda nyckelordet _Thread_local för att anvĂ€nda TLS (Thread-Local Storage) per trĂ„d har introducerats. Som standard initierar C-körningen TLS för huvudtrĂ„den, vilket har ökat den minsta storleken pĂ„ körbara filer frĂ„n 12 till 16 KB.
  • Lade till stöd för parametrarna "--ftrace" och "--strace" till körbara filer för att skriva ut information om alla funktionsanrop och systemanrop till stderr.
  • Lade till stöd för systemanropet closefrom(), stöds i Linux 5.9+, FreeBSD 8+ och OpenBSD.
  • PĂ„ plattformen Linux Prestandan för clock_gettime- och gettimeofday-anrop har ökats upp till 10 gĂ„nger genom att anvĂ€nda vDSO-mekanismen (virtuellt dynamiskt delat objekt), vilket gör det möjligt att flytta systemanropshanteraren till anvĂ€ndarutrymmet och undvika kontextvĂ€xlar.
  • Matematiska funktioner för att arbeta med komplexa tal har överförts frĂ„n Musl-biblioteket. Arbetet med mĂ„nga matematiska funktioner har accelererats.
  • En nointernet()-funktion har föreslagits för att inaktivera nĂ€tverksfunktioner.
  • Nya funktioner har lagts till för effektiv strĂ€ngtillĂ€gg: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf och vappendf.
  • Lade till en skyddad version av kprintf()-funktionsfamiljen, utformad för att fungera med förhöjda privilegier.
  • AvsevĂ€rt förbĂ€ttrad prestanda för implementeringar SSL, SHA, kurva25519 och RSA.

KĂ€lla: opennet.ru

Köp pĂ„litlig hosting för webbplatser med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster