Verëffentlechung vun der Standard C Bibliothéik Cosmopolitan 2.0, entwéckelt fir portable ausführbar Dateien

D'Verëffentlechung vum Cosmopolitan 2.0-Projet gouf publizéiert, entwéckelt d'Standard C-Bibliothéik an en universellen ausführbare Dateiformat, dee benotzt ka ginn fir Programmer fir verschidde Betribssystemer ze verdeelen ouni d'Benotzung vun Dolmetscher a virtuelle Maschinnen. D'Resultat kritt duerch d'Kompilatioun am GCC a Clang ass an eng statesch verlinkt universell ausführbar Datei kompiléiert déi op all Linux Verdeelung, macOS, Windows, FreeBSD, OpenBSD, NetBSD, a souguer aus dem BIOS geruff ka ginn. De Projet Code gëtt ënner der ISC Lizenz verdeelt (eng vereinfacht Versioun vum MIT / BSD).

De Container fir universell ausführbar Dateien ze generéieren baséiert op der Kombinatioun vu Segmenter an Header spezifesch fir verschidde Betribssystemer (PE, ELF, MACHO, OPENBSD) an enger Datei, kombinéiert verschidde verschidde Formater déi an Unix, Windows a macOS benotzt ginn. Fir sécherzestellen datt eng eenzeg ausführbar Datei op Windows an Unix Systemer leeft, ass en Trick Windows PE Dateien als Shell Scripten ze codéieren, andeems Dir d'Tatsaach profitéiert datt Thompson Shell net den "#!" Fir Programmer ze kreéieren déi verschidde Dateien enthalen (all Ressourcen an eng Datei verbënnt), ënnerstëtzt et d'Bildung vun enger ausführbarer Datei a Form vun engem speziell entworfen ZIP-Archiv. Schema vum proposéierte Format (Beispill hello.com Applikatioun):

MZqFpD='BIOS BOOT SECTOR' exec 7 $(command -v $0) printf '\177ELF...LINKER-ENCODED-FREEBSD-HEADER' >&7 exec "$0" "$@" exec qemu-x86_64 "$0" "$ @" Ausgang 1 REAL MODE… ELF SEGMENTS… OPENBSD NOTÉIERT… MACHO HEADERS… CODE AN DATA… ZIP DIRECTORY…

Am Ufank vun der Datei gëtt de Label "MZqFpD" uginn, deen als Windows PE Format Header ugesi gëtt. Dës Sequenz gëtt och an der Instruktioun "pop %r10; jno 0x4a; jo 0x4a", an d'Linn "\177ELF" op d'Instruktioun "jg 0x47", déi benotzt gi fir op den Entréespunkt weiderzekommen. Unix Systemer lafen Shellcode deen den exec Kommando benotzt, deen ausführbare Code duerch en onbenannt Päif passéiert. Eng Begrenzung vun der proposéierter Method ass d'Fäegkeet fir op Unix-ähnleche Betribssystemer nëmme mat Shells ze lafen déi den Thompson Shell Kompatibilitéitsmodus ënnerstëtzen.

De qemu-x86_64 Uruff bitt zousätzlech Portabilitéit an erlaabt Code kompiléiert fir d'x86_64 Architektur fir op Net-x86 Plattformen ze lafen, wéi Raspberry Pi Boards an Apple Apparater, déi mat ARM Prozessoren ausgestatt sinn. De Projet kann och benotzt ginn fir selbststänneg Uwendungen ze kreéieren déi ouni Betribssystem lafen (bare Metal). An esou Uwendungen ass e Bootloader un der ausführbarer Datei befestegt, an de Programm funktionnéiert als bootbar Betribssystem.

D'Standard C Bibliothéik libc entwéckelt vum Projet bitt 2024 Funktiounen (an der éischter Verëffentlechung waren et ongeféier 1400 Funktiounen). Wat d'Performance ugeet, funktionnéiert Cosmopolitan sou séier wéi glibc an ass bemierkenswäert virum Musl an Newlib, trotz der Tatsaach datt Cosmopolitan eng Gréisstuerdnung méi kleng a Codegréisst ass wéi glibc an ongeféier entsprécht Musl an Newlib. Fir dacks genannte Funktiounen wéi memcpy a strlen ze optimiséieren, gëtt d'"Trickle-down Performance" Technik zousätzlech benotzt, an där e Makro-Bindung benotzt gëtt fir d'Funktioun ze ruffen, an där de Compiler informéiert gëtt iwwer d'CPU Registere, déi an der Code Ausféierung involvéiert sinn. Prozess, wat erlaabt Ressourcen ze spueren wann de CPU-Staat späichert andeems se nëmmen verännerbar Registere späicheren.

Ënnert den Ännerungen an der neier Verëffentlechung:

  • De Schema fir Zougang zu internen Ressourcen an enger Zip-Datei ze kréien ass geännert ginn (wann Dir Dateien opmaacht, ginn déi üblech /zip/... Weeër benotzt anstatt den Zip:.. Präfix ze benotzen). Ähnlech, fir Zougang zu Disken a Windows ze kréien, ass et méiglech Weeër wéi "/c/..." ze benotzen anstatt "C:/...".
  • En neien APE (Actually Portable Executable) Loader gouf proposéiert, deen d'Format vun universellen ausführbare Dateien definéiert. Den neie Loader benotzt mmap fir de Programm an d'Erënnerung ze setzen an ännert net méi den Inhalt op der Flucht. Wann néideg, kann déi universell ausführbar Datei a regelméisseg ausführbar Dateien ëmgewandelt ginn, déi un eenzel Plattformen gebonnen sinn.
  • Op der Linux Plattform ass et méiglech de binfmt_misc Kernel Modul ze benotzen fir APE Programmer ze lafen. Et gëtt bemierkt datt d'Benotzung vun binfmt_misc déi séierst Startmethod ass.
  • Fir Linux ass eng Implementatioun vun der Funktionalitéit vun de Pledge () an Unveil () System Uruff entwéckelt vum OpenBSD Projet proposéiert. Eng API gëtt zur Verfügung gestallt fir dës Uriff a Programmer an C, C++, Python a Redbean ze benotzen, souwéi e pledge.com Utility fir arbiträr Prozesser ze isoléieren.
  • D'Build benotzt d'Landlock Make Utility - eng Editioun vu GNU Make mat méi streng Ofhängegkeetskontrollen an d'Benotzung vum Landlock System Uruff fir de Programm vum Rescht vum System ze isoléieren an d'Cachingeffizienz ze verbesseren. Als Optioun gëtt d'Fäegkeet fir mat normale GNU Make ze bauen behalen.
  • Funktioune fir Multithreading goufen ëmgesat - _spawn () an _join (), déi universell Bindungen iwwer APIen spezifesch fir verschidde Betribssystemer sinn. D'Aarbecht ass och amgaang fir POSIX Threads Support ëmzesetzen.
  • Et ass méiglech de Schlësselwuert _Thread_local ze benotzen fir separat Späichere fir all Thread (TLS, Thread-Local Storage) ze benotzen. Par défaut initialiséiert d'C Runtime TLS fir den Haapt thread, wat d'Mindest ausführbar Gréisst vun 12 op 16 KB erhéicht huet.
  • Ënnerstëtzung fir d'Parameteren "--ftrace" an "--strace" gouf fir ausführbar Dateien bäigefüügt fir Informatioun iwwer all Funktiounsruffen a Systemruffen op stderr auszeginn.
  • Zousätzlech Ënnerstëtzung fir den closefrom () System Uruff, ënnerstëtzt op Linux 5.9+, FreeBSD 8+ an OpenBSD.
  • Op der Linux Plattform ass d'Performance vu clock_gettime a gettimeofday Uriff bis zu 10 Mol eropgesat ginn andeems de vDSO (virtuell dynamesche gemeinsamen Objet) Mechanismus benotzt, wat et méiglech mécht de System Call Handler op de Benotzerraum ze verschwannen an Kontextschalter ze vermeiden.
  • Mathematesch Funktiounen fir mat komplexen Zuelen ze schaffen goufen aus der Musl Bibliothéik geplënnert. D'Aarbecht vu ville mathematesch Funktiounen ass beschleunegt ginn.
  • D'Nointernet () Funktioun gouf proposéiert fir Netzwierkfäegkeeten auszeschalten.
  • Nei Funktiounen bäigefüügt fir effizient Saiten ze addéieren: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf an vappendf.
  • Eng geschützt Versioun vun der kprintf () Famill vu Funktiounen dobäigesat, entworf fir mat erhiewte Privilegien ze schaffen.
  • Bedeitend verbessert Leeschtung vun SSL, SHA, curve25519 an RSA Implementatiounen.

Source: opennet.ru

Setzt e Commentaire