Siideynta maktabadda caadiga ah ee C Cosmopolitan 2.0, oo loo sameeyay faylasha la qaadi karo

Siideynta mashruuca Cosmopolitan 2.0 ayaa la daabacay, horumarinta maktabadda caadiga ah ee C iyo qaab fayl caalami ah oo la fulin karo oo loo isticmaali karo in lagu qaybiyo barnaamijyada nidaamyada hawlgalka ee kala duwan iyada oo aan la isticmaalin turjubaano iyo mashiinnada farsamada. Natiijooyinka lagu helay ururinta GCC iyo Clang waxaa lagu soo ururiyay fayl caalami ah oo la fulin karo oo si toos ah ugu xiran kaas oo lagu socodsiin karo qaybinta Linux kasta, macOS, Windows, FreeBSD, OpenBSD, NetBSD, iyo xitaa looga yeero BIOS. Xeerka mashruuca waxa lagu qaybiyaa shatiga ISC (nooca la fududeeyay ee MIT/BSD).

Weelka loogu talagalay soo saarista faylalka caalamiga ah ee la fulin karo waxay ku salaysan tahay isku-darka qaybaha iyo madaxyada gaarka ah ee nidaamyada hawlgalka ee kala duwan (PE, ELF, MACHO, OPENBSD) hal fayl, isku darka qaabab kala duwan oo loo isticmaalo Unix, Windows iyo macOS. Si loo hubiyo in hal fayl oo la fulin karo uu ku socdo nidaamyada Windows iyo Unix, khiyaano ayaa ah in lagu dhejiyo faylasha Windows PE sida qoraallada qolofka, iyadoo laga faa'iidaysanayo xaqiiqda ah in Thompson Shell uusan isticmaalin "#!" Si loo abuuro barnaamijyo ay ku jiraan dhowr faylal (isku xidhka dhammaan agabka hal fayl), waxay taageertaa samaynta fayl la fulin karo oo ah qaab si gaar ah loo qaabeeyey kaydka ZIP. Qorshaha qaabka la soo jeediyay (tusaale codsi 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" "$ @" ka bax 1 DHAB AH

Bilawga faylka, summada "MZqFpD" ayaa lagu muujiyay, taas oo loo arko madaxa qaabka Windows PE. Taxanahan waxa kale oo lagu decodey edbinta "pop%r10; jno 0x4a; jo 0x4a", iyo xariiqda "\177ELF" ee tilmaanta "jg 0x47", kuwaas oo loo isticmaalo in lagu gudbiyo barta laga soo galo. Nidaamyada Unix waxay maamulaan koodka qolofka ee adeegsada amarka fulinta, iyagoo sii maraya koodka la fulin karo tuubo aan la magacaabin. Xaddidaadda habka la soo jeediyay ayaa ah awoodda lagu shaqaynayo nidaamyada hawlgalka ee Unix oo kale iyadoo la isticmaalayo qolofka taageera qaabka waafaqsan Thompson Shell.

Wicitaanka qemu-x86_64 wuxuu bixiyaa qaadis dheeri ah wuxuuna u oggolaanayaa koodka la soo ururiyey ee naqshadaha x86_64 inuu ku shaqeeyo aaladaha aan x86 ahayn, sida looxyada Raspberry Pi iyo aaladaha Apple ee ku qalabaysan soo-saareyaasha ARM. Mashruucu waxa kale oo loo isticmaali karaa in lagu abuuro codsiyo iskood isku xidhan oo ku shaqeeya bilaa nidaamka hawlgalka (biraha qaawan). Codsiyada noocaan ah, bootloader-ku wuxuu ku xiran yahay faylka la fulin karo, barnaamijkuna wuxuu u shaqeeyaa sida nidaamka hawlgalka bootable.

Maktabada caadiga ah ee C libc ee uu sameeyay mashruucu waxa ay soo bandhigtaa 2024 hawlo (siidaynta kowaad waxa jiray ilaa 1400 hawlood). Dhanka waxqabadka, Cosmopolitan wuxuu u shaqeeyaa sida ugu dhakhsaha badan glibc wuxuuna si muuqata uga horreeya Musl iyo Newlib, in kasta oo xaqiiqda ah in Cosmopolitan ay tahay amar ka yar cabbirka koodka glibc oo qiyaastii u dhigma Musl iyo Newlib. Si loo wanaajiyo hawlaha inta badan loo yaqaan sida memcpy iyo strlen, farsamada "waxqabadka khiyaamada hoos u dhaca" ayaa sidoo kale la isticmaalaa, kaas oo isku-xidhka macro loo isticmaalo in lagu waco shaqada, kaas oo isku-dubariduhu lagu wargeliyo diiwaannada CPU ee ku lug leh fulinta code habka, kaas oo u ogolaanaya kaydinta khayraadka marka la badbaadinayo gobolka CPU by kaydinta kaliya diiwaanada la bedeli karo.

Waxaa ka mid ah isbeddelada sii deynta cusub:

  • Nidaamka gelitaanka ilaha gudaha ee faylka sibka waa la bedelay (marka faylasha la furayo, dariiqyada caadiga ah ee /zip/... ayaa hadda la isticmaalaa halkii la isticmaali lahaa zip: horgalaha). Sidoo kale, si aad u geliso disk-yada Windows, waxaa suurtagal ah in la isticmaalo waddooyinka sida "/c/..." halkii "C:/..."
  • Raadiyaha cusub ee APE (Dhab ahaantii la qaadi karo) ayaa la soo jeediyay, kaas oo qeexaya qaabka faylasha caalamiga ah ee la fulin karo. Raadiyaha cusubi wuxuu isticmaalaa mmap si uu barnaamijka ugu dhigo xusuusta oo aan hadda beddelmin waxa ku jira duulista. Haddii loo baahdo, faylka caalamiga ah ee la fulin karo waxa loo rogi karaa faylal joogto ah oo la fulin karo oo ku xidhan goobo gaar ah.
  • Goobta Linux, waxaa suurtagal ah in la isticmaalo moduleka kernel binfmt_misc si loo socodsiiyo barnaamijyada APE. Waxaa la xusay in isticmaalka binfmt_misc ay tahay habka ugu dhaqsiyaha badan.
  • Linux, hirgalinta shaqaynta ballan qaadka() iyo daah-furka() wicitaanada nidaamka ee uu sameeyay mashruuca OpenBSD ayaa la soo jeediyay. API waxaa lagu bixiyaa isticmaalka wicitaanadaan barnaamijyada C, C++, Python iyo Redbean, iyo sidoo kale utility pledge.com si loo go'doomiyo habab aan sabab lahayn.
  • Dhismuhu wuxuu isticmaalaa utility-ga Landlock-ka - daabacaadda GNU Samee oo leh hubinta ku-tiirsanaanta dheeraadka ah iyo adeegsiga nidaamka Landlockka si looga go'doomiyo barnaamijka inta ka hartay nidaamka loona hagaajiyo waxtarka kaydinta. Ikhtiyaar ahaan, awoodda lagu dhisayo GNU-ga caadiga ah waa la hayaa.
  • Hawsha loogu talagalay akhrinta badan ayaa la hirgeliyay - _spawn() iyo _join(), kuwaas oo ah xidhidh caalami ah oo ku saabsan API-yada u gaarka ah nidaamyada hawlgalka ee kala duwan. Waxaa sidoo kale socda shaqada si loo hirgeliyo taageerada POSIX Threads.
  • Waa suurtogal in la isticmaalo _Thread_local keyword si aad u isticmaasho kayd gaar ah dun kasta (TLS, Thread-Local Storage). Sida caadiga ah, C runtime wuxuu u bilaabaa TLS dunta ugu weyn, taas oo sababtay cabbirka ugu yar ee la fulin karo inuu ka kordho 12 ilaa 16 KB.
  • Taageerada xuduudaha "-ftrace" iyo "--strace" ayaa lagu daray faylalka la fulin karo si loo soo saaro macluumaadka ku saabsan dhammaan wicitaannada shaqada iyo wicitaannada nidaamka stderr.
  • Taageero lagu daray wicitaanka nidaamka xiritaanka (), oo lagu taageeray Linux 5.9+, FreeBSD 8+ iyo OpenBSD.
  • Madal Linux ah, waxqabadka clock_gettime iyo gettimeofday wicitaanada ayaa la kordhiyay ilaa 10 jeer iyadoo la adeegsanayo habka vDSO (shayga la wadaago ee firfircoon, taas oo suurtogal ka dhigaysa in loo wareejiyo maamulaha wicitaanka nidaamka booska isticmaalaha kana fogaato furayaasha macnaha guud.
  • Hawlaha xisaabta ee ku shaqaynta nambarada adag ayaa laga raray maktabadda Musl. Shaqada hawlo badan oo xisaabeed ayaa la dardargeliyay.
  • Shaqada nointernet() ayaa la soo jeediyay si loo joojiyo awooda shabakada
  • Lagu daray hawlo cusub oo si hufan loogu dhejiyo xargaha: lifaaqa, lifaaqa, lifaaqa, lifaaqa, lifaaqa, appendz, kappendf, kvappendf iyo vappendf.
  • Lagu daray nooca la ilaaliyo ee kprintf() qoyska hawlaha, looguna talagalay in lagu shaqeeyo mudnaanta sare.
  • Waxqabadka si weyn loo hagaajiyay ee SSL, SHA, curve25519 iyo hirgelinta RSA.

Source: opennet.ru

Add a comment