Sgaoileadh den leabharlann àbhaisteach C Cosmopolitan 2.0, air a leasachadh airson faidhlichean so-ghiùlain so-ghiùlain

Chaidh foillseachadh a’ phròiseict Cosmopolitan 2.0 fhoillseachadh, a’ leasachadh leabharlann àbhaisteach C agus cruth faidhle so-ghnìomhaichte uile-choitcheann a ghabhas cleachdadh gus prògraman a sgaoileadh airson diofar shiostaman obrachaidh gun a bhith a’ cleachdadh eadar-mhìnearan agus innealan mas-fhìor. Tha an toradh a gheibhear le bhith a’ cur ri chèile ann an GCC agus Clang air a chur ri chèile ann am faidhle so-ghnìomhaichte uile-choitcheann ceangailte gu statach a ghabhas ruith air cuairteachadh Linux sam bith, macOS, Windows, FreeBSD, OpenBSD, NetBSD, agus eadhon air a ghairm bhon BIOS. Tha còd a’ phròiseict air a chuairteachadh fo chead ISC (dreach nas sìmplidhe de MIT/BSD).

Tha an soitheach airson faidhlichean so-ghnìomhaichte uile-choitcheann a ghineadh stèidhichte air a bhith a’ cothlamadh earrannan agus cinn-cinn a tha sònraichte do dhiofar shiostaman obrachaidh (PE, ELF, MACHO, OPENBSD) ann an aon fhaidhle, a’ cothlamadh grunn chruthan eadar-dhealaichte a thathas a’ cleachdadh ann an Unix, Windows agus macOS. Gus dèanamh cinnteach gu bheil aon fhaidhle so-ghnìomhaichte a’ ruith air siostaman Windows agus Unix, is e cleas a th’ ann faidhlichean Windows PE a chòdachadh mar sgriobtaichean shligean, a’ gabhail brath air nach bi Thompson Shell a’ cleachdadh an comharra-sgriobt “#!”. Gus prògraman a chruthachadh anns a bheil grunn fhaidhlichean (a 'ceangal a h-uile goireas ann an aon fhaidhle), bidh e a' toirt taic do bhith a 'cruthachadh faidhle so-ghnìomhaichte ann an cruth tasglann ZIP a chaidh a dhealbhadh gu sònraichte. Sgeama an cruth a thathar a’ moladh (eisimpleir iarrtas 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" "$ @" ar-a-mach 1 MODE DÙTHCHAIL… SEGMENTS ELF… FOSGLADH NOTA… Cinn-cinn MACHO… CÒD AGUS DÀTA… STIÙIREADH ZIP…

Aig toiseach an fhaidhle, tha an leubail “MZqFpD” air a chomharrachadh, a tha air fhaicinn mar cheann-cinn cruth Windows PE. Tha an t-sreath seo cuideachd air a chòdachadh san stiùireadh “pop % r10; jno 0x4a; jo 0x4a", agus an loidhne "\177ELF" chun an stiùiridh "jg 0x47", a thathas a' cleachdadh airson a chur air adhart chun àite inntrigidh. Bidh siostaman Unix a’ ruith còd slige a chleachdas an àithne exec, a’ dol seachad air a’ chòd so-ghnìomhaichte tro phìob gun ainm. Is e cuingealachadh air an dòigh a tha san amharc an comas ruith air siostaman obrachaidh coltach ri Unix a-mhàin a’ cleachdadh shligean a bheir taic do mhodh co-chòrdalachd Thompson Shell.

Tha an gairm qemu-x86_64 a’ toirt seachad comas giùlain a bharrachd agus a’ ceadachadh còd a chaidh a chur ri chèile airson ailtireachd x86_64 a ruith air àrd-ùrlaran neo-x86, leithid bùird Raspberry Pi agus innealan Apple uidheamaichte le pròiseasairean ARM. Faodar am pròiseact a chleachdadh cuideachd gus tagraidhean fèin-chumanta a chruthachadh a bhios a’ ruith às aonais siostam obrachaidh (meatailt lom). Ann an leithid de thagraidhean, tha bootloader ceangailte ris an fhaidhle so-ghnìomhaichte, agus tha am prògram ag obair mar shiostam obrachaidh bootable.

Tha an leabharlann àbhaisteach C leabharlann a chaidh a leasachadh leis a’ phròiseact a’ tabhann 2024 gnìomh (anns a’ chiad fhoillseachadh bha timcheall air 1400 gnìomh). A thaobh coileanadh, tha Cosmopolitan ag obair cho luath ri glibc agus gu follaiseach air thoiseach air Musl agus Newlib, a dh’ aindeoin gu bheil Cosmopolitan na òrdugh meudachd nas lugha ann am meud còd na glibc agus timcheall air a ’freagairt ri Musl agus Newlib. Gus gnìomhan ris an canar gu tric leithid memcpy agus strlen a bharrachadh, thathas a’ cleachdadh an innleachd “trickle-down performance” a bharrachd, anns a bheil macro-cheangail air a chleachdadh gus an gnìomh a ghairm, anns a bheil fios aig an neach-cruinneachaidh mu na clàran CPU a tha an sàs ann an coileanadh còd. pròiseas, a leigeas le goireasan a shàbhaladh nuair a shàbhalas tu staid CPU le bhith a’ sàbhaladh clàran a ghabhas atharrachadh.

Am measg nan atharrachaidhean san fhoillseachadh ùr:

  • Tha an sgeama airson faighinn gu goireasan a-staigh taobh a-staigh faidhle zip air atharrachadh (nuair a dh’ fhosglas tu faidhlichean, tha na slighean àbhaisteach /zip/... a-nis air an cleachdadh an àite a bhith a’ cleachdadh an ro-leasachan zip:..). San aon dòigh, gus faighinn gu diosgan ann an Windows, tha e comasach slighean mar “/ c/...” a chleachdadh an àite “C:/...”.
  • Chaidh luchdan ùr APE (Actually Portable Executable) a mholadh, a mhìnicheas cruth nam faidhlichean so-ghnìomhaichte uile-choitcheann. Bidh an luchdan ùr a’ cleachdadh mmap gus am prògram a chuir mar chuimhneachan agus gun a bhith ag atharrachadh na tha air a’ iteig tuilleadh. Ma tha feum air, faodar am faidhle so-ghnìomhaichte uile-choitcheann a thionndadh gu faidhlichean so-ghnìomhaichte cunbhalach ceangailte ri àrd-ùrlaran fa leth.
  • Air an àrd-ùrlar Linux, tha e comasach am modal kernel binfmt_misc a chleachdadh gus prògraman APE a ruith. Thathas a’ toirt fa-near gur e cleachdadh binfmt_misc an dòigh tòiseachaidh as luaithe.
  • Airson Linux, thathar air moladh gun tèid gnìomhachd an t-siostaim gealltanas() agus foillseachadh() a leasachadh leis a’ phròiseact OpenBSD a mholadh. Tha API air a sholarachadh airson na gairmean sin a chleachdadh ann am prògraman ann an C, C ++, Python agus Redbean, a bharrachd air goireas pledge.com airson a bhith a’ dealachadh phròiseasan neo-riaghailteach.
  • Bidh an togail a’ cleachdadh goireas Landlock Make - deasachadh de GNU Make le sgrùdadh eisimeileachd nas cruaidhe agus cleachdadh gairm siostam Landlock gus am prògram a sgaradh bhon chòrr den t-siostam agus èifeachdas caching adhartachadh. Tha an comas togail le GNU Make cunbhalach air a chumail mar roghainn.
  • Chaidh gnìomhan airson multithreading a chuir an gnìomh - _spawn() agus _join(), a tha nan ceanglachan uile-choitcheann thairis air APIan a tha sònraichte do dhiofar shiostaman obrachaidh. Tha obair a’ dol air adhart cuideachd gus taic POSIX Threads a bhuileachadh.
  • Tha e comasach am prìomh fhacal _Thread_local a chleachdadh gus stòradh air leth a chleachdadh airson gach snàithlean (TLS, Thread-Local Storage). Gu gnàthach, bidh an ùine ruith C a ’tòiseachadh TLS airson a’ phrìomh snàithlean, a tha air adhbhrachadh gum bi am meud so-ghnìomhaichte as ìsle ag èirigh bho 12 KB gu 16 KB.
  • Chaidh taic airson na paramadairean “--ftrace” agus “--strace” a chuir ri faidhlichean so-ghnìomhaichte gus fiosrachadh a chuir a-mach mu gach fios gnìomh agus fiosan siostam gu stderr.
  • Taic a bharrachd airson gairm siostam closefrom (), le taic air Linux 5.9+, FreeBSD 8+ agus OpenBSD.
  • Air an àrd-ùrlar Linux, tha coileanadh gairmean clock_gettime agus gettimeofday air àrdachadh suas gu 10 tursan le bhith a’ cleachdadh an uidheamachd vDSO (rudeigin co-roinnte fiùghantach brìgheil), a tha ga dhèanamh comasach inneal-làimhseachaidh gairm an t-siostaim a ghluasad gu àite luchd-cleachdaidh agus suidsichean co-theacsa a sheachnadh.
  • Chaidh gnìomhan matamataigeach airson obrachadh le àireamhan iom-fhillte a ghluasad bhon leabharlann Musl. Tha obair iomadh gnìomh matamataigeach air a luathachadh.
  • Chaidh an gnìomh nointernet () a mholadh gus comasan lìonra a chuir dheth.
  • Chaidh gnìomhan ùra a chur ris airson sreangan a cheangal gu h-èifeachdach: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf agus vappendf.
  • Chuir sinn ris dreach dìon den teaghlach ghnìomhan kprintf(), air a dhealbhadh gus obrachadh le sochairean àrdaichte.
  • Coileanadh air a leasachadh gu mòr air buileachadh SSL, SHA, curve25519 agus RSA.

Source: fosgailtenet.ru

Cuir beachd ann