Te whakaputanga o te whare pukapuka C paerewa Cosmopolitan 2.0, i whakawhanakehia mo nga konae kawe kawe

Ko te tukunga o te kaupapa Cosmopolitan 2.0 kua whakaputaina, e whakawhanake ana i te whare pukapuka C paerewa me te whakatakotoranga konae ka taea te whakamahi hei tohatoha i nga kaupapa mo nga punaha whakahaere rereke me te kore whakamahi i nga kaiwhakamaori me nga miihini mariko. Ko te hua ka puta mai i te whakahiato i roto i te GCC me te Clang ka whakahiatohia ki roto i tetahi konae ka taea te whakahaere i te ao katoa ka taea te whakahaere i runga i nga tohatoha Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD, me te waea mai i te BIOS. Ka tohatohahia te waehere kaupapa i raro i te raihana ISC (he putanga ngawari o MIT/BSD).

Ko te ipu mo te whakaputa i nga konae ka taea te whakahaere i runga i te whakakotahi i nga waahanga me nga pane e pa ana ki nga punaha whakahaere rereke (PE, ELF, MACHO, OPENBSD) i roto i te konae kotahi, me te whakakotahi i nga momo whakatakotoranga rereke e whakamahia ana i Unix, Windows me macOS. Hei whakarite kia kotahi te konae ka taea te whakahaere i runga i nga punaha Windows me te Unix, he mahi tinihanga ko te whakawaehere i nga konae Windows PE hei tuhinga anga, me te kore e whakamahia e Thompson Shell te tohu tohu "#!". Hei waihanga i nga kaupapa e mau ana i te maha o nga konae (e hono ana i nga rauemi katoa ki te konae kotahi), ka tautokohia te hanga o tetahi konae ka taea te whakahaere i te ahua o te puranga ZIP i hangaia motuhake. Te kaupapa o te whakatakotoranga e whakaarohia ana (tauira hello.com tono):

MZqFpD='BIOS BOOT SECTOR' exec 7 $(whakahau -v $0) printf '\177ELF...LINKER-ENCODED-FREEBSD-HEADER' >&7 exec "$0" "$@" exec qemu-x86_64 "$0" "$ @" puta 1 ARatau TINO… NGA WAIHANGA ELF… WHAKATOKANGA OPENBSD… NGA PANUNGA MACHO… WAETU ME TE RAARAARA… ZIP DIRECTORY…

I te timatanga o te konae, ka tohuhia te tapanga "MZqFpD", e kiia ana he pane whakatakotoranga Windows PE. Ka wetewetehia ano tenei raupapa i roto i te tohutohu "pop %r10; jno 0x4a ; jo 0x4a", me te raina "\177ELF" ki te tohutohu "jg 0x47", ka whakamahia hei tuku whakamua ki te waahi urunga. Ko nga punaha Unix e whakahaere ana i te waehere anga e whakamahi ana i te whakahau exec, ka tukuna te waehere ka taea te whakahaere ma te paipa kore ingoa. Ko te herenga o te tikanga e whakaarohia ana ko te kaha ki te whakahaere i runga i nga punaha whakahaere rite Unix anake ma te whakamahi anga e tautoko ana i te aratau hototahi a Thompson Shell.

Ko te waea qemu-x86_64 e whakarato ana i etahi atu kawe ka taea te whakahiato i te waehere mo te hoahoanga x86_64 kia rere ki runga i nga papaa kore-x86, penei i nga papa Raspberry Pi me nga taputapu Apple e mau ana ki nga tukatuka ARM. Ka taea hoki te whakamahi i te kaupapa ki te hanga i nga tono whai-whaiaro e rere ana me te kore he punaha whakahaere (metara kore). I roto i enei tono, ka honoa he bootloader ki te konae ka taea te whakahaere, ka mahi te kaupapa hei punaha whakahaere bootable.

Ko te paerewa C library libc i whakawhanakehia e te kaupapa e tuku ana i nga mahi 2024 (i te tukunga tuatahi he 1400 pea nga mahi). Mo nga mahi, he tere te mahi a Cosmopolitan ki te glibc me te mea kei mua tonu i a Musl me Newlib, ahakoa ko te Cosmopolitan he raupapa o te rahinga iti ake te rahi o te waehere i te glibc me te rite ki a Musl me Newlib. Hei arotau i nga mahi e karangahia ana penei i te memcpy me te strlen, ka whakamahia ano te tikanga "trickle-down performance", ka whakamahia he here tonotono ki te karanga i te mahi, ka whakamohiotia te kaikoipi mo nga rehita PTM e uru ana ki te mahi waehere. tukanga, e taea ai te penapena rauemi i te wa e penapena ana te ahua PTM ma te penapena i nga rehita rereke anake.

I roto i nga huringa o te tukunga hou:

  • Ko te kaupapa mo te uru atu ki nga rauemi o roto i roto i te konae konae kua whakarereketia (i te wa e whakatuwhera ana i nga konae, ka whakamahia nga ara o mua /zip/... kaore i te whakamahi i te zip:.. prefix). Waihoki, ki te uru ki nga kopae i Windows, ka taea te whakamahi i nga huarahi penei i te "/c/..." hei utu mo "C:/...".
  • Kua tukuna he APE hou (Actually Portable Executable) utauta, e tautuhi ana i te whakatakotoranga o nga konae ka taea te kawe. Ka whakamahi te kaitautai hou i te mmap hei tuu i te hotaka ki roto i te mahara, ka kore e whakarereke i nga ihirangi i runga i te rere. Mena e tika ana, ka taea te huri i te konae kawe i te ao ki nga konae ka taea te mahi i nga wa katoa e herea ana ki nga papahanga takitahi.
  • I runga i te papaaho Linux, ka taea te whakamahi i te kōwae kernel binfmt_misc hei whakahaere i nga kaupapa APE. E tohuhia ana ko te whakamahi binfmt_misc te huarahi tere tere.
  • Mo Linux, he whakatinanatanga o te taumahinga o te taunaha() me te hura() waea punaha i whakawhanakehia e te kaupapa OpenBSD kua whakaarohia. Ka whakaratohia he API mo te whakamahi i enei waea i roto i nga kaupapa i roto i te C, C++, Python me Redbean, tae atu ki tetahi taputapu pledge.com mo te wehe i nga tikanga tuku noa.
  • Ka whakamahia e te hanga te whaipainga Landlock Make - he putanga o GNU Make me te tino arowhai whakawhirinaki me te whakamahi i te waea punaha Landlock ki te wehe i te papatono mai i te toenga o te punaha me te whakapai ake i te pai o te keteroki. Hei whiringa, ka mau tonu te kaha ki te hanga me te GNU Make.
  • Kua whakatinanahia nga mahi mo te miro maha - _spawn() me _join(), he herenga mo te ao katoa ki runga i nga API motuhake ki nga punaha whakahaere rereke. Kei te haere ano nga mahi ki te whakatinana i te tautoko POSIX Threads.
  • Ka taea te whakamahi i te kupu matua _Thread_local ki te whakamahi rokiroki motuhake mo ia miro (TLS, Rokiroki Miro-Local). Ma te taunoa, ka arawhiti te wa whakahaere C i te TLS mo te miro matua, na te mea i piki ake ai te iti rawa o te rahi mai i te 12 KB ki te 16 KB.
  • Ko te tautoko mo nga tawhā "--ftrace" me "--strace" kua taapirihia ki nga konae ka taea te whakaputa korero mo nga waea mahi katoa me nga waea punaha ki te stderr.
  • He tautoko taapiri mo te kati mai () waea punaha, e tautokohia ana i runga i te Linux 5.9+, FreeBSD 8+ me OpenBSD.
  • I runga i te papaaho Linux, kua piki ake te mahinga o nga waea karaka_gettime me te gettimeofday ki te 10 nga wa ma te whakamahi i te tikanga vDSO (mariko hihiri tiritahi ahanoa), e taea ai te neke te kaikawe waea waea ki te waahi kaiwhakamahi me te karo i nga huringa horopaki.
  • Kua nekehia nga mahi pangarau mo te mahi me nga tau matatini mai i te whare pukapuka Musl. Kua whakaterehia te mahi a te maha o nga mahi pangarau.
  • Ko te mahi nointernet() kua whakaarohia kia whakakorehia nga kaha whatunga.
  • Kua taapirihia nga mahi hou mo te taapiri tika i nga aho: apiti, apiti, apiti, taapiri, apiti, apiti, kappendf, kvappendf me te vappendf.
  • I taapirihia he putanga tiaki o te whanau kprintf() o nga mahi, i hangaia hei mahi me nga mana teitei.
  • Kua tino pai ake te mahi a SSL, SHA, curve25519 me RSA.

Source: opennet.ru

Tāpiri i te kōrero