Famoahana ny tranomboky C mahazatra Cosmopolitan 2.0, novolavolaina ho an'ny rakitra azo tanterahana

Navoaka ny famoahana ny tetikasa Cosmopolitan 2.0, namolavola ny tranomboky C manara-penitra sy ny endrika rakitra azo tanterahina manerantany izay azo ampiasaina amin'ny fizarana programa ho an'ny rafitra fiasa samihafa tsy misy fampiasana mpandika teny sy milina virtoaly. Ny vokatra azo avy amin'ny fanangonana ao amin'ny GCC sy Clang dia natambatra ho rakitra azo tanterahina manerana izao rehetra izao mifandray amin'ny statika izay azo atao amin'ny fizarana Linux rehetra, macOS, Windows, FreeBSD, OpenBSD, NetBSD, ary na dia antsoina amin'ny BIOS aza. Ny fehezan-dalàna momba ny tetikasa dia zaraina amin'ny alàlan'ny fahazoan-dàlana ISC (dikan-dikan-tsoratry ny MIT/BSD).

Ny kaontenera hamoronana rakitra azo tanterahana manerantany dia mifototra amin'ny fampifangaroana fizarana sy lohapejy manokana amin'ny rafitra fiasana samihafa (PE, ELF, MACHO, OPENBSD) ao anaty rakitra iray, manambatra endrika maro samihafa ampiasaina amin'ny Unix, Windows ary macOS. Mba hahazoana antoka fa ny rakitra iray azo tanterahana dia mandeha amin'ny rafitra Windows sy Unix, ny hafetsena dia ny manidy ny rakitra Windows PE ho script shell, manararaotra ny hoe tsy mampiasa ny marika script "#!" i Thompson Shell. Mba hamoronana programa misy rakitra maromaro (mampifandray ny loharano rehetra amin'ny rakitra iray), dia manohana ny fananganana rakitra azo tanterahana amin'ny endrika archive ZIP namboarina manokana. Tetika amin'ny endrika atolotra (ohatra fampiharana 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" "$ @" fivoahana 1 REAL MODE… ELF SEGMENTS… OPENBSD NOTE… MACHO HEADERS… CODE AND DATA… ZIP DIRECTORY…

Eo am-piandohan'ny rakitra dia aseho ny marika "MZqFpD", izay heverina ho lohatenin'ny endrika Windows PE. Ity filaharana ity koa dia voadika ao amin'ny torolàlana "pop %r10; jno 0x4a ; jo 0x4a", ary ny tsipika "\177ELF" mankany amin'ny toromarika "jg 0x47", izay ampiasaina hampandrosoana ny teboka fidirana. Ny rafitra Unix dia mampiasa kaody shell izay mampiasa ny baiko exec, mandalo ny kaody azo tanterahana amin'ny alàlan'ny fantsona tsy fantatra anarana. Ny fetran'ny fomba atolotra dia ny fahafahana mandeha amin'ny rafitra fiasa mitovy amin'ny Unix raha tsy mampiasa akorandriaka izay manohana ny fomba mifanaraka amin'ny Thompson Shell.

Ny antso qemu-x86_64 dia manome portability fanampiny ary mamela ny kaody voaangona ho an'ny maritrano x86_64 mba hihazakazaka amin'ny sehatra tsy x86, toy ny boards Raspberry Pi sy ny fitaovana Apple miaraka amin'ny processeur ARM. Ny tetikasa dia azo ampiasaina ihany koa mba hamoronana fampiharana manokana izay mandeha tsy misy rafitra fandidiana (metaly bare). Amin'ny fampiharana toy izany, misy bootloader miraikitra amin'ny rakitra azo tanterahana, ary ny programa dia miasa toy ny rafitra fiasa bootable.

Ny libc mahazatra C libc novolavolain'ny tetikasa dia manolotra fiasa 2024 (tamin'ny famoahana voalohany dia nisy fiasa 1400 teo ho eo). Amin'ny lafiny fampisehoana, ny Cosmopolitan dia miasa haingana toy ny glibc ary mibaribary mialoha ny Musl sy Newlib, na dia eo aza ny hoe Cosmopolitan dia filaharana kely kokoa amin'ny haben'ny code noho ny glibc ary mifanitsy amin'i Musl sy Newlib. Mba hanamafisana ny fiasa antsoina matetika toy ny memcpy sy strlen, dia ampiasaina koa ny teknika "trickle-down performance", izay misy fatorana macro ampiasaina hiantsoana ilay asa, izay ampandrenesina ny compiler momba ny rejisitra CPU tafiditra amin'ny famonoana ny code. dingana, izay mamela ny fitahirizana loharano rehefa mitahiry ny fanjakana CPU amin'ny fitahirizana rejistra azo ovaina ihany.

Anisan'ireo fanovana tamin'ny famoahana vaovao:

  • Niova ny tetika hidirana amin'ny loharano anatiny ao anaty rakitra zip (rehefa manokatra rakitra dia ny lalana mahazatra /zip/... no ampiasaina fa tsy mampiasa ny prefix zip:..). Toy izany koa, raha te hiditra amin'ny kapila amin'ny Windows, dia azo atao ny mampiasa lalana toy ny "/c/..." fa tsy "C:/...".
  • APE (Actually Portable Executable) vaovao no natolotra, izay mamaritra ny endriky ny rakitra rehetra azo tanterahina. Ny loader vaovao dia mampiasa mmap hametrahana ny programa ao anaty fitadidiana ary tsy hanova ny atiny amin'ny lalitra intsony. Raha ilaina dia azo avadika ho rakitra azo tanterahana mahazatra mifamatotra amin'ny sehatra tsirairay ny rakitra azo tanterahana manerantany.
  • Amin'ny sehatra Linux dia azo atao ny mampiasa ny maody kernel binfmt_misc mba hampandehanana ny programa APE. Marihina fa ny fampiasana binfmt_misc no fomba fandefasana haingana indrindra.
  • Ho an'ny Linux, dia naroso ny fampiharana ny fampandehanan-draharahan'ny antso() sy unveil() rafitra novolavolain'ny tetikasa OpenBSD. Ny API dia omena amin'ny fampiasana ireo antso ireo amin'ny programa amin'ny C, C ++, Python ary Redbean, ary koa ny pledge.com fampiasa amin'ny fanavahana ireo dingana tsy misy dikany.
  • Ny fananganana dia mampiasa ny fitaovana Landlock Make - fanontana GNU Make miaraka amin'ny fanamarinana fiankinan-doha henjana kokoa sy ny fampiasana ny antson'ny rafitra Landlock mba hampisaraka ny programa amin'ny rafitra hafa ary hanatsarana ny fahombiazan'ny caching. Ho safidy dia tazonina ny fahafahana manangana miaraka amin'ny GNU Make mahazatra.
  • Ny fiasa ho an'ny multithreading dia nampiharina - _spawn() sy _join(), izay fatorana manerantany amin'ny API manokana amin'ny rafitra fiasana samihafa. Mandeha ihany koa ny asa hampiharana ny fanohanan'ny POSIX Threads.
  • Azo atao ny mampiasa ny teny fototra _Thread_local mba hampiasa fitahirizana misaraka ho an'ny kofehy tsirairay (TLS, Thread-Local Storage). Amin'ny alàlan'ny default, ny C runtime dia manomboka ny TLS ho an'ny kofehy lehibe, izay nahatonga ny habe azo tanterahana kely indrindra niakatra avy amin'ny 12 ka hatramin'ny 16 KB.
  • Ny fanohanana ny "--ftrace" sy ny "--strace" dia nampiana ireo rakitra azo tanterahana mba hamoahana vaovao momba ny antso rehetra sy ny antso an-tariby amin'ny stderr.
  • Fanampiana fanampiny ho an'ny antso an-tariby closefrom(), tohana amin'ny Linux 5.9+, FreeBSD 8+ ary OpenBSD.
  • Ao amin'ny sehatra Linux, ny fampandehanana ny clock_gettime sy gettimeofday antso dia nitombo hatramin'ny in-10 tamin'ny fampiasana ny vDSO (virtual dynamic shared object), izay ahafahana mamindra ny mpanentana antso an-tariby mankany amin'ny habaka mpampiasa ary misoroka ny fifandimbiasana context.
  • Nafindra tao amin'ny tranomboky Musl ny asa matematika ho an'ny miasa amin'ny isa sarotra. Nohafainganina ny asan'ny asa matematika maro.
  • Ny fiasa nointernet() dia natolotra mba hanesorana ny fahafahan'ny tambajotra.
  • Nampiana fiasa vaovao ho an'ny fametahana tady mahomby: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf ary vappendf.
  • Nampiana dikan-teny voaaro amin'ny kprintf() fianakaviamben'ny asa, natao hiasa miaraka amin'ny tombontsoa ambony.
  • Nihatsara be ny fampisehoana SSL, SHA, curve25519 ary RSA.

Source: opennet.ru

Add a comment