අතේ ගෙන යා හැකි ක්‍රියාත්මක කළ හැකි ගොනු සඳහා සංවර්ධනය කරන ලද සම්මත C පුස්තකාලය Cosmopolitan 2.0 නිකුත් කිරීම

පරිවර්තක සහ අථත්‍ය යන්ත්‍ර භාවිතයෙන් තොරව විවිධ මෙහෙයුම් පද්ධති සඳහා වැඩසටහන් බෙදා හැරීමට භාවිතා කළ හැකි සම්මත C පුස්තකාලය සහ විශ්වීය ක්‍රියාත්මක කළ හැකි ගොනු ආකෘතියක් සංවර්ධනය කරමින් Cosmopolitan 2.0 ව්‍යාපෘතියේ නිකුතුව ප්‍රකාශයට පත් කර ඇත. GCC සහ Clang හි සම්පාදනය කිරීමෙන් ලැබෙන ප්‍රතිඵලය ඕනෑම Linux බෙදාහැරීමක්, macOS, Windows, FreeBSD, OpenBSD, NetBSD සහ BIOS වෙතින් පවා ක්‍රියාත්මක කළ හැකි ස්ථිතිකව සම්බන්ධිත විශ්වීය ක්‍රියාත්මක කළ හැකි ගොනුවකට සම්පාදනය කෙරේ. ව්‍යාපෘති කේතය ISC බලපත්‍රය යටතේ බෙදා හැරේ (MIT/BSD හි සරල අනුවාදයකි).

විශ්වීය ක්‍රියාත්මක කළ හැකි ගොනු උත්පාදනය කිරීම සඳහා වන බහාලුම පදනම් වී ඇත්තේ විවිධ මෙහෙයුම් පද්ධති (PE, ELF, MACHO, OPENBSD) සඳහා විශේෂිත වූ කොටස් සහ ශීර්ෂයන් එක් ගොනුවක ඒකාබද්ධ කිරීම, Unix, Windows සහ macOS හි භාවිතා වන විවිධ ආකෘති කිහිපයක් ඒකාබද්ධ කිරීම මත ය. එක් ක්‍රියාත්මක කළ හැකි ගොනුවක් Windows සහ Unix පද්ධති මත ධාවනය වන බව සහතික කිරීම සඳහා, Thompson Shell විසින් "#!" ස්ක්‍රිප්ට් මාර්කර් භාවිතා නොකිරීමේ වාසිය ලබා ගනිමින් Windows PE ගොනු shell scripts ලෙස කේතනය කිරීම උපක්‍රමයක් වේ. ගොනු කිහිපයක් ඇතුළත් වැඩසටහන් නිර්මාණය කිරීම සඳහා (සියලු සම්පත් එක් ගොනුවකට සම්බන්ධ කිරීම), එය විෙශේෂෙයන් නිර්මාණය කරන ලද ZIP සංරක්ෂිතයක ආකාරෙය් කියාත්මක කළ හැකි ගොනුවක් සෑදීමට සහය දක්වයි. යෝජිත ආකෘතියේ යෝජනා ක්‍රමය (උදාහරණ 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" "$ @" 1 සැබෑ මාදිලියෙන් පිටවන්න... ELF කොටස්... විවෘත BSD සටහන... Macho Headers... කේතය සහ දත්ත... ZIP නාමාවලිය...

ගොනුවේ ආරම්භයේ දී, "MZqFpD" ලේබලය දක්වනු ලැබේ, එය Windows PE ආකෘති ශීර්ෂයක් ලෙස සැලකේ. මෙම අනුපිළිවෙල “pop %r10; jno 0x4a ; jo 0x4a", සහ "jg 177x0" උපදෙස් වෙත "\47ELF" රේඛාව, ඇතුල් වීමේ ස්ථානය වෙත යොමු කිරීමට භාවිතා කරයි. Unix පද්ධති exec විධානය භාවිතා කරන ෂෙල් කේතය ධාවනය කරයි, ක්‍රියාත්මක කළ හැකි කේතය නම් නොකළ පයිප්පයක් හරහා යවයි. යෝජිත ක්‍රමයේ සීමාවක් වන්නේ තොම්සන් ෂෙල් අනුකූලතා මාදිලියට සහය දක්වන ෂෙල් භාවිතා කරමින් යුනික්ස් වැනි මෙහෙයුම් පද්ධති මත ධාවනය කිරීමේ හැකියාවයි.

qemu-x86_64 ඇමතුම අමතර අතේ ගෙන යා හැකි බව සපයන අතර x86_64 ගෘහ නිර්මාණ ශිල්පය සඳහා සම්පාදනය කරන ලද කේතය Raspberry Pi පුවරු සහ ARM ප්‍රොසෙසර සහිත Apple උපාංග වැනි x86 නොවන වේදිකා මත ධාවනය කිරීමට ඉඩ සලසයි. මෙහෙයුම් පද්ධතියක් (හිස් ලෝහ) නොමැතිව ක්‍රියාත්මක වන ස්වයං අන්තර්ගත යෙදුම් නිර්මාණය කිරීමට ද ව්‍යාපෘතිය භාවිතා කළ හැකිය. එවැනි යෙදුම් වලදී, ක්‍රියාත්මක කළ හැකි ගොනුවට ඇරඹුම් කාරකයක් අමුණා ඇති අතර, වැඩසටහන ආරම්භ කළ හැකි මෙහෙයුම් පද්ධතියක් ලෙස ක්‍රියා කරයි.

ව්‍යාපෘතිය මගින් සංවර්ධනය කරන ලද සම්මත C පුස්තකාලය libc 2024 කාර්යයන් සපයයි (පළමු නිකුතුවේදී කාර්යයන් 1400 ක් පමණ විය). කාර්ය සාධනය සම්බන්ධයෙන් ගත් කල, Cosmopolitan glibc තරම් වේගයෙන් ක්‍රියා කරන අතර Musl සහ Newlib වලට වඩා කැපී පෙනෙන ලෙස ඉදිරියෙන් සිටී, Cosmopolitan යනු glibc ට වඩා කේත ප්‍රමාණයෙන් කුඩා වන අතර Musl සහ Newlib වලට ආසන්න වශයෙන් අනුරූප වේ. memcpy සහ strlen වැනි නිතර හඳුන්වන ශ්‍රිතයන් ප්‍රශස්ත කිරීම සඳහා, "ට්‍රික්ල්-ඩවුන් ක්‍රියාකාරීත්වය" තාක්‍ෂණය අතිරේකව භාවිතා කරනු ලැබේ, එහිදී ශ්‍රිතය ඇමතීමට සාර්ව බන්ධනයක් භාවිතා කරයි, කේත ක්‍රියාත්මක කිරීමේදී සම්බන්ධ වන CPU රෙජිස්ටර් ගැන සම්පාදකයාට දැනුම් දෙනු ලැබේ. ක්‍රියාවලිය, වෙනස් කළ හැකි ලේඛන පමණක් සුරැකීමෙන් CPU තත්ත්වය සුරැකීමේදී සම්පත් සුරැකීමට ඉඩ සලසයි.

නව නිකුතුවේ වෙනස්කම් අතර:

  • zip ගොනුවක් තුළ අභ්‍යන්තර සම්පත් වෙත ප්‍රවේශ වීමේ යෝජනා ක්‍රමය වෙනස් කර ඇත (ගොනු විවෘත කිරීමේදී zip:.. උපසර්ගය වෙනුවට සාමාන්‍ය /zip/... මාර්ග දැන් භාවිතා වේ). ඒ හා සමානව, වින්ඩෝස් හි තැටි වෙත පිවිසීමට, "C:/..." වෙනුවට "/c/..." වැනි මාර්ග භාවිතා කළ හැකිය.
  • නව APE (සැබවින්ම අතේ ගෙන යා හැකි ක්‍රියාත්මක කළ හැකි) ලෝඩරයක් යෝජනා කර ඇත, එය විශ්වීය ක්‍රියාත්මක කළ හැකි ගොනු වල ආකෘතිය නිර්වචනය කරයි. වැඩසටහන මතකයේ තැබීමට නව පූරකය mmap භාවිතා කරන අතර තවදුරටත් පියාසර කිරීමේදී අන්තර්ගතය වෙනස් නොකරයි. අවශ්‍ය නම්, විශ්වීය ක්‍රියාත්මක කළ හැකි ගොනුව තනි වේදිකා සමඟ සම්බන්ධ කර ඇති සාමාන්‍ය ක්‍රියාත්මක කළ හැකි ගොනු බවට පරිවර්තනය කළ හැකිය.
  • Linux වේදිකාවේදී, APE වැඩසටහන් ක්‍රියාත්මක කිරීමට binfmt_misc කර්නල් මොඩියුලය භාවිතා කළ හැක. binfmt_misc භාවිතා කිරීම වේගවත්ම දියත් කිරීමේ ක්‍රමය බව සටහන් වේ.
  • Linux සඳහා, OpenBSD ව්‍යාපෘතිය මගින් සංවර්ධනය කරන ලද ප්‍රතිඥාව() සහ unveil() පද්ධති ඇමතුම්වල ක්‍රියාකාරීත්වය ක්‍රියාත්මක කිරීම යෝජනා කර ඇත. C, C++, Python සහ Redbean හි වැඩසටහන් වල මෙම ඇමතුම් භාවිතා කිරීම සඳහා API සපයනු ලැබේ, එසේම හිතුවක්කාර ක්‍රියාවලි හුදකලා කිරීම සඳහා pledge.com උපයෝගිතා වේ.
  • ගොඩනැගීම සඳහා Landlock Make utility භාවිතා කරයි - GNU Make හි සංස්කරණයක් වඩාත් දැඩි පරායත්තතා පිරික්සීම සහ Landlock පද්ධති ඇමතුම භාවිතයෙන් වැඩසටහන සෙසු පද්ධතියෙන් හුදකලා කිරීමට සහ හැඹිලි කාර්යක්ෂමතාව වැඩි දියුණු කරයි. විකල්පයක් ලෙස, සාමාන්‍ය GNU Make සමඟ ගොඩනැගීමේ හැකියාව රඳවා තබා ගනී.
  • Multithreading සඳහා වන කාර්යයන් ක්‍රියාවට නංවා ඇත - _spawn() සහ _join(), ඒවා විවිධ මෙහෙයුම් පද්ධති සඳහා විශේෂිත API මත විශ්වීය බන්ධන වේ. POSIX Threads සහාය ක්‍රියාවට නැංවීමේ කටයුතු ද සිදු වෙමින් පවතී.
  • එක් එක් ත්‍රෙඩ් සඳහා වෙන වෙනම ආචයනය (TLS, Thread-Local Storage) භාවිතා කිරීමට _Thread_local මූල පදය භාවිතා කළ හැක. පෙරනිමියෙන්, C ධාවන කාලය ප්‍රධාන නූල් සඳහා TLS ආරම්භ කරයි, එය අවම ක්‍රියාත්මක කළ හැකි ප්‍රමාණය 12 සිට 16 KB දක්වා වැඩි කිරීමට හේතු වී ඇත.
  • සියලුම ක්‍රියාකාරී ඇමතුම් සහ පද්ධති ඇමතුම් stderr වෙත ප්‍රතිදානය කිරීමට ක්‍රියාත්මක කළ හැකි ගොනු වෙත “--ftrace” සහ “--strace” පරාමිති සඳහා සහය එක් කර ඇත.
  • Closefrom() පද්ධති ඇමතුම සඳහා සහය එක් කරන ලදී, Linux 5.9+, FreeBSD 8+ සහ OpenBSD මත සහය දක්වයි.
  • Linux වේදිකාවේ, vDSO (අතථ්‍ය ගතික හවුල් වස්තුව) යාන්ත්‍රණය භාවිතා කිරීමෙන් clock_gettime සහ gettimeofday ඇමතුම්වල ක්‍රියාකාරිත්වය 10 ගුණයක් දක්වා වැඩි කර ඇත, එමඟින් පද්ධති ඇමතුම් හසුරුවන්නා පරිශීලක අවකාශයට ගෙනයාමට සහ සන්දර්භය මාරුවීම් වළක්වා ගැනීමට හැකි වේ.
  • සංකීර්ණ සංඛ්‍යා සමඟ වැඩ කිරීම සඳහා ගණිතමය ශ්‍රිත Musl පුස්තකාලයෙන් ගෙන ගොස් ඇත. බොහෝ ගණිතමය කාර්යයන් වල වැඩ වේගවත් කර ඇත.
  • ජාල හැකියාවන් අක්‍රිය කිරීමට nointernet() ශ්‍රිතය යෝජනා කර ඇත.
  • තන්තු කාර්යක්ෂමව එකතු කිරීම සඳහා නව කාර්යයන් එකතු කරන ලදි: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf සහ vappendf.
  • උසස් වරප්‍රසාද සමඟ වැඩ කිරීමට නිර්මාණය කර ඇති, kprintf() පවුලේ ශ්‍රිතවල ආරක්ෂිත අනුවාදයක් එක් කරන ලදී.
  • SSL, SHA, curve25519 සහ RSA ක්‍රියාත්මක කිරීම් වල සැලකිය යුතු ලෙස වැඩිදියුණු කරන ලද කාර්ය සාධනය.

මූලාශ්රය: opennet.ru

අදහස් එක් කරන්න