Kuburitswa kweyakajairwa C raibhurari Cosmopolitan 2.0, yakagadziridzwa kuti inotakurika mafaera

Kuburitswa kweiyo Cosmopolitan 2.0 purojekiti yakatsikiswa, ichigadzira yakajairwa C raibhurari uye yepasirese inoteedzera faira fomati iyo inogona kushandiswa kugovera zvirongwa zveakasiyana masisitimu anoshanda pasina kushandisa vaturikiri uye chaiwo michina. Mhedzisiro yakawanikwa nekuunganidza muGCC neClang inounganidzwa kuita yakabatana yakabatana yepasirese faira inogona kumhanyisa pane chero Linux kugovera, macOS, Windows, FreeBSD, OpenBSD, NetBSD, uye kunyange yakadanwa kubva kuBIOS. Iyo kodhi yeprojekiti yakagoverwa pasi peISC rezinesi (yakareruka vhezheni yeMIT/BSD).

Chigadziko chekugadzira mafaera anogoneka chakavakirwa pakubatanidza zvikamu uye misoro yakananga kune akasiyana masisitimu anoshanda (PE, ELF, MACHO, OPENBSD) mufaira rimwe chete, achibatanidza akati wandei mafomati anoshandiswa muUnix, Windows uye macOS. Kuve nechokwadi chekuti faira rimwechete rinogoneka rinomhanya paWindows uye Unix masisitimu, hunyengeri ndeyekukodha Windows PE mafaera semagoko script, kutora mukana wekuti Thompson Shell haashandise iyo "#!" script marker. Kugadzira zvirongwa zvinosanganisira akati wandei mafaera (kubatanidza zviwanikwa zvese mufaira rimwe), inotsigira kuumbwa kwefaira rinogoneka muchimiro cheyakanyatsogadzirirwa ZIP archive. Scheme yefomati yakatsanangurwa (muenzaniso hello.com application):

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

Pakutanga kwefaira, iyo "MZqFpD" inoratidzwa, iyo inonzwisiswa seWindows PE format header. Kutevedzana uku kunotemerwawo murairo β€œpop %r10; jno 0x4a ; jo 0x4a", uye mutsara "\ 177ELF" kune rairo "jg 0x47", iyo inoshandiswa kuendesa kune yekupinda. Unix masisitimu anomhanyisa kodhi kodhi inoshandisa iyo exec kuraira, ichipfuura iyo inogoneka kodhi kuburikidza nepombi isina kutaurwa zita. Muganho weiyo nzira yakarongwa kugona kumhanya paUnix-senge masisitimu anoshanda chete uchishandisa mabhomba anotsigira Thompson Shell inoenderana modhi.

Iyo qemu-x86_64 kufona inopa kuwedzera kutakurika uye inobvumira kodhi yakaunganidzwa kuti x86_64 architecture ishande pane asiri-x86 mapuratifomu, akadai seRaspberry Pi mabhodhi neApple zvishandiso zvine maARM processor. Iyo purojekiti inogona zvakare kushandiswa kugadzira ega-ega maapplication anomhanya pasina sisitimu yekushandisa (simbi isina chinhu). Mune zvikumbiro zvakadaro, bootloader inosungirirwa kune faira rinoshandiswa, uye chirongwa chinoshanda se bootable inoshanda sisitimu.

Iyo yakajairwa C raibhurari libc yakagadziriswa nepurojekiti inopa 2024 mabasa (mukuburitswa kwekutanga kwaive neanosvika zana nemakumi mana emabasa). Panyaya yekuita, Cosmopolitan inoshanda nekukurumidza seglibc uye inooneka pamberi peMusl neNewlib, zvisinei nekuti Cosmopolitan ihomwe yehukuru muhukuru hwekodhi pane glibc uye inoda kuenderana neMusl neNewlib. Kukwirisa anowanzo kunzi mabasa akadai se memcpy uye strlen, iyo "trickle-down performance" inoshandiswa zvakare, umo inosunga macro inoshandiswa kudaidza basa, umo mugadziri anoziviswa nezve CPU marejista anobatanidzwa mukuita kodhi. process, iyo inobvumira kuchengetedza zviwanikwa paunenge uchichengetedza CPU mamiriro nekuchengetedza chete anochinja marejista.

Pakati pekuchinja mukuburitswa kutsva:

  • Chirongwa chekuwana zviwanikwa zvemukati mukati mezip faira yakashandurwa (kana uchivhura mafaera, yakajairika /zip/... nzira dzava kushandiswa panzvimbo yekushandisa zip:.. prefix). Saizvozvowo, kuti uwane ma disks muWindows, zvinokwanisika kushandisa nzira dzakadai se "/ c/..." panzvimbo ye "C: / ...".
  • Iyo APE itsva (Chaizvo Inotakurika Inotakurika) loader yakatsanangurwa, iyo inotsanangura mafomati epasirese eecutable mafaira. Iyo nyowani yekurodha inoshandisa mmap kuisa chirongwa mundangariro uye haichachinje zvirimo panhunzi. Kana zvichidikanwa, iyo universal executable faira inogona kushandurwa kuita anogara achiitwa mafaera akasungirirwa kumapuratifomu ega.
  • PaLinux papuratifomu, zvinokwanisika kushandisa binfmt_misc kernel module kumhanya APE zvirongwa. Zvinocherechedzwa kuti kushandisa binfmt_misc ndiyo inokurumidza nzira yekutanga.
  • YeLinux, kuita kwekuita kwechivimbiso () uye unveil() system mafoni akagadzirwa neOpenBSD purojekiti yakatsanangurwa. An API inopihwa yekushandisa mafoni aya muzvirongwa muC, C++, Python neRedbean, pamwe nepledge.com yekushandisa yekuparadzanisa maitiro asina kunaka.
  • Kuvaka kunoshandisa iyo Landlock Gadzira utility - edition yeGNU Gadzira ine zvakanyanya kuomesera kutarisa uye kushandiswa kweiyo Landlock system yekufona kuparadzanisa chirongwa kubva kune yese sisitimu uye kugadzirisa caching kunyatsoita. Senge sarudzo, kugona kuvaka neyakajairwa GNU Make kunochengetwa.
  • Mabasa ekuverenga akawanda akaitwa - _spawn() uye _join(), zvinova zvinosungirwa pasi rose pamusoro pemaAPI akananga kune akasiyana masisitimu anoshanda. Basa ririkuenderera mberi rekushandisa POSIX Threads rutsigiro.
  • Zvinogoneka kushandisa _Thread_local keyword kushandisa chengetedzo yakaparadzana kune yega yega (TLS, Thread-Local Storage). Nekusagadzika, iyo C yekumhanyisa nguva inotangisa TLS yetambo huru, izvo zvakonzera kuti hudiki hunogoneka huwedzere kubva pa12 KB kusvika 16 KB.
  • Tsigiro ye "--ftrace" uye "--strace" maparamendi akawedzerwa kune anoteedzera mafaera kuti abudise ruzivo nezvese basa mafoni uye system yekufona kune stderr.
  • Yakawedzerwa rutsigiro rweiyo closefrom() system call, inotsigirwa paLinux 5.9+, FreeBSD 8+ uye OpenBSD.
  • Papuratifomu yeLinux, kuita kweclock_gettime uye gettimeofday kufona kwakawedzera kusvika kagumi nekushandisa vDSO (virtual dynamic shared object) mashandiro anoita kuti zvikwanise kufambisa system call handler kunzvimbo yemushandisi uye kudzivirira shanduko yemamiriro ezvinhu.
  • Mabasa eMasvomhu ekushanda nenhamba dzakaoma akatamiswa kubva muraibhurari yeMusl. Basa remabasa akawanda emasvomhu rakakurumidziswa.
  • Iyo nointernet () basa rakakurudzirwa kudzima network kugona.
  • Yakawedzera mabasa matsva ekunyatso wedzera tambo: append, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf uye vappendf.
  • Yakawedzera vhezheni yakachengetedzwa ye kprintf () mhuri yemabasa, yakagadzirirwa kushanda neropafadzo dzakakwirira.
  • Yakavandudzwa zvakanyanya kuita kweSSL, SHA, curve25519 uye RSA kuita.

Source: opennet.ru

Voeg