د معیاري C کتابتون کاسموپولیټان 2.0 خوشې کول، د پورټ ایبل اجرا وړ فایلونو لپاره رامینځته شوی

د کاسموپولیټان 2.0 پروژه خپره شوې ، د معیاري C کتابتون رامینځته کول او د نړیوال اجرا وړ فایل فارمیټ رامینځته کول چې د مختلف عملیاتي سیسټمونو لپاره د ژباړونکو او مجازی ماشینونو کارولو پرته د برنامو ویشلو لپاره کارول کیدی شي. په GCC او کلینګ کې د تالیف کولو له لارې ترلاسه شوې پایله په ثابت ډول تړل شوي یونیورسل اجرایوي فایل کې تالیف شوې چې په هر لینکس توزیع ، macOS ، وینډوز ، FreeBSD ، OpenBSD ، NetBSD ، او حتی د BIOS څخه ویل کیدی شي. د پروژې کوډ د ISC جواز لاندې ویشل شوی (د MIT/BSD ساده نسخه).

د نړیوال اجرایوي فایلونو رامینځته کولو کانټینر په یو فایل کې د مختلف عملیاتي سیسټمونو (PE, ELF, MACHO, OPENBSD) لپاره ځانګړي برخې او سرلیکونو ترکیب کولو پراساس دی ، په یونیکس ، وینډوز او macOS کې کارول شوي ډیری مختلف فارمیټونه ترکیب کوي. د دې لپاره چې ډاډ ترلاسه شي چې یو واحد اجرا وړ فایل په وینډوز او یونیکس سیسټمونو کې پرمخ ځي، یو چال دا دی چې د وینډوز PE فایلونه د شیل سکریپټونو په توګه کوډ کړئ، د دې حقیقت څخه ګټه پورته کول چې تامپسن شیل د "#!" سکریپټ مارکر نه کاروي. د داسې برنامو رامینځته کولو لپاره چې ډیری فایلونه پکې شامل وي (ټول سرچینې په یوه فایل کې نښلول) ، دا د ځانګړي ډیزاین شوي زپ آرشیف په شکل کې د اجرا وړ فایل رامینځته کولو ملاتړ کوي. د وړاندیز شوي شکل سکیم (د هیلو. com غوښتنلیک مثال):

MZqFpD='BIOS بوټ سکټور' اجرا 7 $(command -v $0) printf '\177ELF...LINKER-ENCODED-FREEBSD-HEADER' >&7 exec "$0" "$@" exec qemu-x86_64 "$0" "$ @" د 1 اصلي حالت څخه وتل… د ELF برخې… د خلاصې بی ایس ډی نوټ… ماچو هیډرز… کوډ او ډیټا… د زپ لارښود…

د فایل په پیل کې، لیبل "MZqFpD" ښودل شوی، کوم چې د وینډوز PE فارمیټ سرلیک په توګه پیژندل کیږي. دا ترتیب په "پاپ %r10; jno 0x4a ; jo 0x4a"، او د "jg 177x0" لارښوونې ته "\47ELF" کرښه، کوم چې د ننوتلو ځای ته د وړاندې کولو لپاره کارول کیږي. د یونیکس سیسټمونه د شیل کوډ چلوي چې د exec کمانډ کاروي، د اجرا وړ کوډ د نامعلوم پایپ له لارې تیریږي. د وړاندیز شوي میتود محدودیت یوازې د شیلونو په کارولو سره د یونیکس په څیر عملیاتي سیسټمونو کې د چلولو وړتیا ده چې د تومپسن شیل مطابقت حالت ملاتړ کوي.

د qemu-x86_64 زنګ اضافي پورټ وړتیا چمتو کوي او د x86_64 معمارۍ لپاره تالیف شوي کوډ ته اجازه ورکوي چې په غیر x86 پلیټ فارمونو کې چلیږي ، لکه د راسبیري پای بورډونه او د ایپل وسایل چې د ARM پروسیسرونو سره مجهز دي. دا پروژه د خپل ځان لرونکي غوښتنلیکونو رامینځته کولو لپاره هم کارول کیدی شي چې پرته له عملیاتي سیسټم (ننګ فلزي) پرمخ ځي. په داسې غوښتنلیکونو کې، بوټلوډر د اجرا وړ فایل سره وصل دی، او برنامه د بوټ وړ عملیاتي سیسټم په توګه کار کوي.

د پروژې لخوا رامینځته شوی معیاري C کتابتون libc د 2024 افعال وړاندیز کوي (په لومړي خپرونه کې شاوخوا 1400 دندې وې). د فعالیت په شرایطو کې، کاسموپولیټان د glibc په څیر ګړندی کار کوي او د پام وړ د Musl او Newlib څخه مخکې دی، سره له دې چې کاسموپولیټان د کوډ په اندازې کې د glibc په پرتله کوچنی او نږدې د مسل او نیولیب سره مطابقت لري. په مکرر ډول ویل شوي فنکشنونو لکه memcpy او strlen د اصلاح کولو لپاره ، د "ټریکل-ډاون فعالیت" تخنیک هم کارول کیږي ، په کوم کې چې د فنکشن زنګ وهلو لپاره میکرو بانډنګ کارول کیږي ، په کوم کې چې کمپیلر د CPU راجسترونو په اړه خبریږي چې د کوډ اجرا کولو کې ښکیل دي. پروسه، کوم چې د سرچینو خوندي کولو ته اجازه ورکوي کله چې د CPU حالت خوندي کوي یوازې د بدلون وړ راجسترونو خوندي کولو سره.

په نوي ریلیز کې د بدلونونو په منځ کې:

  • د zip فایل دننه داخلي سرچینو ته د لاسرسي سکیم بدل شوی (کله چې فایلونه خلاصیږي، اوس د zip:.. مخکینۍ کارولو پرځای معمول /zip/... لارې کارول کیږي). په ورته ډول، په وینډوز کې ډیسکونو ته د لاسرسي لپاره، دا ممکنه ده چې د "C:/..." پرځای د "/c/..." په څیر لارې وکاروئ.
  • یو نوی APE (په حقیقت کې د پورټ ایبل اجرا وړ) لوډر وړاندیز شوی ، کوم چې د نړیوال اجرا وړ فایلونو فارمیټ تعریفوي. نوی لوډر mmap کاروي ترڅو برنامه په حافظه کې ځای په ځای کړي او نور په الوتنه کې مینځپانګې نه بدلوي. که اړتیا وي، د نړیوال اجرا وړ فایل د انفرادي پلیټ فارمونو سره تړل شوي منظم اجرا وړ فایلونو کې بدلیدلی شي.
  • په لینکس پلیټ فارم کې، دا ممکنه ده چې د APE پروګرامونو چلولو لپاره د binfmt_misc کرنل ماډل وکاروئ. د یادونې وړ ده چې د binfmt_misc کارول ترټولو ګړندۍ لانچ میتود دی.
  • د لینکس لپاره، د OpenBSD پروژې لخوا رامینځته شوي د ژمنې () او افشا () سیسټم کالونو فعالیت پلي کول وړاندیز شوي. یو API په C, C++، Python او Redbean کې په برنامو کې د دې زنګونو کارولو لپاره چمتو شوی ، په بیله بیا د خپل سري پروسو جلا کولو لپاره د pledge.com یوټیلیټ.
  • جوړ د لینډ لاک میک یوټیلیټ کاروي - د GNU Make یوه نسخه د ډیر سخت انحصار چیک کولو سره او د لینډ لاک سیسټم کال کارول ترڅو برنامه له پاتې سیسټم څخه جلا کړي او د کیشینګ موثریت ښه کړي. د یو اختیار په توګه، د منظم GNU Make سره د جوړولو وړتیا ساتل کیږي.
  • د ملټي ټریډینګ لپاره دندې پلي شوي - _spawn() او _join()، کوم چې د مختلف عملیاتي سیسټمونو لپاره ځانګړي APIs باندې نړیوال پابند دي. د POSIX Threads ملاتړ پلي کولو لپاره هم کار روان دی.
  • دا ممکنه ده چې د _Thread_local کلیدي کلمه وکاروئ ترڅو د هرې موضوع لپاره جلا ذخیره وکاروئ (TLS، Thread-Local Storage). په ډیفالټ ډول، د C رن ټایم د اصلي تار لپاره TLS پیل کوي، کوم چې د لږترلږه اجرا وړ اندازه له 12 KB څخه 16 KB ته لوړیږي.
  • د "--ftrace" او "--strace" پیرامیټونو لپاره ملاتړ د اجرا وړ فایلونو کې اضافه شوی ترڅو د ټولو فنکشن کالونو او سټیډر ته د سیسټم کالونو په اړه معلومات تولید کړي.
  • د Closefrom() سیسټم کال لپاره ملاتړ اضافه شوی، په لینکس 5.9+، FreeBSD 8+ او OpenBSD کې ملاتړ شوی.
  • په لینکس پلیټ فارم کې ، د clock_gettime او gettimeofday زنګونو فعالیت د vDSO (مجازی متحرک شریک شوي اعتراض) میکانیزم په کارولو سره تر 10 ځله زیات شوی ، کوم چې دا امکان ورکوي چې د سیسټم کال هینډلر د کارونکي ځای ته حرکت وکړي او د شرایطو سویچونو څخه مخنیوی وکړي.
  • د پیچلو شمیرو سره د کار کولو لپاره ریاضيکي فعالیتونه د مسل کتابتون څخه لیږدول شوي. د ډیری ریاضياتي دندو کار ګړندی شوی دی.
  • nointernet() فنکشن د شبکې وړتیاوې غیر فعالولو لپاره وړاندیز شوی.
  • په اغیزمنه توګه د تارونو ضمیمه کولو لپاره نوي افعال اضافه شوي: ضمیمه، ضمیمه، ضمیمه، ضمیمه، ضمیمه، ضمیمه، کیپنډف، kvappendf او vappendf.
  • د kprintf() د دندو د کورنۍ یوه خوندي نسخه اضافه کړه، د لوړ امتیازاتو سره کار کولو لپاره ډیزاین شوې.
  • د SSL، SHA، curve25519 او RSA پلي کولو فعالیت د پام وړ ښه شوی.

سرچینه: opennet.ru

Add a comment