အိတ်ဆောင် စီစစ်နိုင်သော ဖိုင်များအတွက် ဖန်တီးထားသော စံ C စာကြည့်တိုက် Cosmopolitan 2.0 ကို ဖြန့်ချိသည်။

Cosmopolitan 2.0 ပရောဂျက်သည် စံ C library နှင့် interpreters သို့မဟုတ် virtual machine များ မလိုအပ်ဘဲ မတူညီသော operating system များတွင် program များကို ဖြန့်ဝေရန် အသုံးပြုနိုင်သော universal executable format တစ်ခုကို တီထွင်ထုတ်လုပ်ထားပြီး ထွက်ရှိလာပြီဖြစ်သည်။ GCC နှင့် Clang ဖြင့် compile လုပ်ခြင်းဖြင့် မည်သည့် distribution တွင်မဆို run နိုင်သော statically linked universal executable file တစ်ခုကို ရရှိစေသည်။ Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD နှင့် BIOS ဝင်ရောက်ခွင့်များပင်။ ပရောဂျက်၏ကုဒ်ကို ISC လိုင်စင် (MIT/BSD လိုင်စင်၏ ရိုးရှင်းသောဗားရှင်း) အောက်တွင် ဖြန့်ဝေထားသည်။

universal executable files များဖွဲ့စည်းရန် container သည် Unix တွင်အသုံးပြုသော format အမျိုးမျိုးကို ပေါင်းစပ်ခြင်း၊ operating system အမျိုးမျိုးအတွက် သီးခြား segment များနှင့် headers (PE, ELF, MACHO, OPENBSD) များကို ဖိုင်တစ်ခုတည်းတွင် ပေါင်းစပ်ခြင်းအပေါ် အခြေခံသည်။ Windows и macOSexecutable file တစ်ခုကို စတင်အသုံးပြုနိုင်စေရန်အတွက် Windows နှင့် Unix စနစ်များသည် ဖိုင်ကုဒ်ဝှက်ခြင်းနှင့် ဆက်စပ်သော လှည့်ကွက်တစ်ခုကို အသုံးပြုကြသည် Windows PE ကို shell script အဖြစ်အသုံးပြုထားပြီး Thompson Shell တွင် "#!" script marker မပါဝင်ခြင်းကို အခွင့်ကောင်းယူထားသည်။ ဖိုင်များစွာပါဝင်သော ပရိုဂရမ်များကို ဖန်တီးရန်အတွက် (အရင်းအမြစ်အားလုံးကို ဖိုင်တစ်ခုတည်းအဖြစ် ပေါင်းစပ်ခြင်း)၊ executable ဖိုင်ကို အထူးဖော်မတ်ချထားသော ZIP archive အဖြစ် ဖန်တီးနိုင်သည်။ အဆိုပြုထားသော format (ဥပမာ- hello.com application):

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 အပိုင်းများ… OPENBSD မှတ်ချက်… MACHO ခေါင်းစီးများ… ကုဒ်နှင့် ဒေတာ… စာတိုက်လမ်းညွှန်…

ဖိုင်ရဲ့အစမှာ “MZqFpD” ဆိုတဲ့ အညွှန်းကို ညွှန်ပြထားပြီး format header အဖြစ် ယူဆကြပါတယ်။ Windows PE။ ဤအစီအစဥ်သည် "pop %r10; jno 0x4a; jo 0x4a" ညွှန်ကြားချက်ထဲသို့လည်း decode လုပ်ကာ "\177ELF" စာကြောင်းကို "jg 0x47" ညွှန်ကြားချက်ထဲသို့ ထည့်သွင်းပြီး ၎င်းတို့ကို entry point သို့ ပြန်ညွှန်းရန် အသုံးပြုသည်။ Unix စနစ်များတွင် shell ကုဒ်ကို exec command ကို အသုံးပြု၍ လုပ်ဆောင်ပြီး executable ကုဒ်ကို အမည်မဖော်ထားသော pipe မှတစ်ဆင့် ဖြတ်သန်းစေသည်။ အဆိုပြုထားသော နည်းလမ်း၏ ကန့်သတ်ချက်တစ်ခုမှာ Thompson Shell compatibility mode ကို ပံ့ပိုးပေးသော shell များကို အသုံးပြု၍ Unix ကဲ့သို့သော operating system များတွင်သာ လုပ်ဆောင်နိုင်ခြင်းဖြစ်သည်။

qemu-x86_64 ခေါ်ဆိုမှုသည် ထပ်လောင်းသယ်ဆောင်ရလွယ်ကူစေပြီး x86_64 ဗိသုကာအတွက် စုစည်းထားသောကုဒ်များကို Raspberry Pi ဘုတ်များနှင့် ARM ပရိုဆက်ဆာများတပ်ဆင်ထားသော Apple စက်ပစ္စည်းများကဲ့သို့သော x86 ပလပ်ဖောင်းမဟုတ်သည့်ပလပ်ဖောင်းများတွင် လုပ်ဆောင်နိုင်စေသည်။ ပရောဂျက်ကို လည်ပတ်မှုစနစ် (သတ္တုမပါသော) မပါဘဲ လုပ်ဆောင်သည့် ကိုယ်တိုင်ပါရှိသော အပလီကေးရှင်းများကို ဖန်တီးရန်အတွက်လည်း အသုံးပြုနိုင်သည်။ ထိုသို့သောအပလီကေးရှင်းများတွင်၊ bootloader ကို executable file နှင့်တွဲထားပြီး၊ ပရိုဂရမ်သည် bootable operating system တစ်ခုအနေဖြင့်လုပ်ဆောင်သည်။

ပရောဂျက်မှတီထွင်ထားသော standard C library libc သည် 2024 လုပ်ဆောင်ချက်များကိုပေးဆောင်သည် (ပထမထုတ်ဝေမှုတွင်လုပ်ဆောင်ချက်ပေါင်း 1400 ခန့်ရှိသည်)။ စွမ်းဆောင်ရည်အရ၊ Cosmopolitan သည် glibc ကဲ့သို့မြန်ဆန်စွာအလုပ်လုပ်ပြီး Cosmopolitan သည် glibc ထက် ကုဒ်အရွယ်အစားသေးငယ်ပြီး ခန့်မှန်းခြေအားဖြင့် Musl နှင့် Newlib တို့နှင့် ကိုက်ညီမှုရှိသော်လည်း Musl နှင့် Newlib ထက် သိသိသာသာ သာလွန်နေပါသည်။ memcpy နှင့် strlen ကဲ့သို့သော မကြာခဏခေါ်သည့် လုပ်ဆောင်ချက်များကို အကောင်းဆုံးဖြစ်အောင် လုပ်ဆောင်ရန်၊ ကုဒ်လုပ်ဆောင်မှုတွင် ပါဝင်သည့် CPU မှတ်ပုံတင်မှုများအကြောင်း အသိပေးသည့် macro binding ကို အသုံးပြုသည့် “trickle-down performance” နည်းပညာကို ထပ်လောင်းအသုံးပြုထားသည်။ ပြောင်းလဲနိုင်သော မှတ်ပုံတင်မှုများကိုသာ သိမ်းဆည်းခြင်းဖြင့် CPU အခြေအနေကို သိမ်းဆည်းသည့်အခါ အရင်းအမြစ်များကို သိမ်းဆည်းခြင်းအား ခွင့်ပြုသည့် လုပ်ငန်းစဉ်။

အသစ်ထွက်ရှိထားသော အပြောင်းအလဲများထဲတွင်-

  • ဇစ်ဖိုင်တစ်ခုအတွင်းရှိ အတွင်းပိုင်းအရင်းအမြစ်များကို ဝင်ရောက်ကြည့်ရှုသည့်ပုံစံကို ပြောင်းလဲလိုက်ပါပြီ (ဖိုင်များကိုဖွင့်သည့်အခါ၊ zip:.. ရှေ့ဆက်ဖြင့် ဝင်ရောက်ကြည့်ရှုမည့်အစား ပုံမှန်လမ်းကြောင်းများ /zip/… ကို ယခုအသုံးပြုပါသည်)။ အလားတူပင်၊ ဒစ်ခ်များသို့ ဝင်ရောက်ခွင့် Windows "C:/..." အစား "/c/..." ကဲ့သို့သော လမ်းကြောင်းများကို အသုံးပြုနိုင်စွမ်းရည်ကို မိတ်ဆက်ပြီးဖြစ်သည်။
  • universal executable files ၏ဖော်မတ်ကို သတ်မှတ်ပေးသည့် APE (အမှန်တကယ် အိတ်ဆောင် အကောင်ထည်ဖော်နိုင်သော) loader အသစ်ကို အဆိုပြုထားသည်။ loader အသစ်သည် ပရိုဂရမ်ကို memory တွင်ထားရန် mmap ကိုအသုံးပြုပြီး အကြောင်းအရာများကို အချိန်နှင့်တပြေးညီ ပြောင်းလဲခြင်းမပြုတော့ပါ။ လိုအပ်ပါက၊ universal executable file ကို ပလက်ဖောင်းတစ်ခုချင်းစီနှင့် ချိတ်ဆက်ထားသော ပုံမှန် executable files အဖြစ်သို့ ပြောင်းနိုင်သည်။
  • ပလက်ဖောင်းပေါ် Linux APE ပရိုဂရမ်များကို စတင်ရန် binfmt_misc kernel module ကို အသုံးပြုနိုင်သည့် စွမ်းရည်ကို အကောင်အထည်ဖော်ပြီးဖြစ်သည်။ binfmt_misc ကိုအသုံးပြုခြင်းသည် အမြန်ဆုံးစတင်နည်းလမ်းဖြစ်ကြောင်း သတိပြုမိပါသည်။
  • အတွက် Linux OpenBSD ပရောဂျက်မှ တီထွင်ထားသော pledge() နှင့် unveil() စနစ်ခေါ်ဆိုမှုများကို အကောင်အထည်ဖော်ရန် အဆိုပြုထားပါသည်။ C၊ C++၊ Python နှင့် Redbean ပရိုဂရမ်များတွင် ဤခေါ်ဆိုမှုများကို အသုံးပြုရန် API တစ်ခုအပြင်၊ မသမာသော လုပ်ငန်းစဉ်များကို ခွဲထုတ်ရန်အတွက် pledge.com utility ကို ပံ့ပိုးပေးထားပါသည်။
  • တည်ဆောက်မှုတွင် Landlock Make utility ကိုအသုံးပြုသည် - GNU Make ၏ထုတ်ဝေမှုတွင် ပိုမိုတင်းကျပ်သောမှီခိုအားထားမှုစစ်ဆေးခြင်းနှင့် Landlock စနစ်ခေါ်ဆိုမှုအသုံးပြုခြင်းနှင့်အတူ ပရိုဂရမ်အား စနစ်၏ကျန်ရှိမှုမှခွဲထုတ်ပြီး ကက်ချမှုထိရောက်မှုတိုးတက်စေပါသည်။ ရွေးချယ်စရာတစ်ခုအနေဖြင့်၊ ပုံမှန် GNU Make ဖြင့်တည်ဆောက်နိုင်စွမ်းကိုဆက်လက်ထိန်းသိမ်းထားသည်။
  • Multithreading အတွက် လုပ်ဆောင်ချက်များ - _spawn() နှင့် _join() တို့သည် မတူညီသောလည်ပတ်မှုစနစ်များအတွက် သီးခြား APIs များပေါ်တွင် universal bindings များဖြစ်သည်။ POSIX Threads ပံ့ပိုးမှုကို အကောင်အထည်ဖော်ရန်လည်း လုပ်ဆောင်နေပါသည်။
  • စာတွဲတစ်ခုစီအတွက် သီးခြားသိုလှောင်မှု (TLS၊ Thread-Local Storage) ကို အသုံးပြုရန် _Thread_local သော့ချက်စကားလုံးကို အသုံးပြုနိုင်သည်။ ပုံမှန်အားဖြင့်၊ C runtime သည် ပင်မစာတွဲအတွက် TLS ကို အစပြုပေးသည်၊ ၎င်းသည် အနိမ့်ဆုံးလုပ်ဆောင်နိုင်သောအရွယ်အစားကို 12 KB မှ 16 KB အထိတိုးလာစေပါသည်။
  • “--ftrace” နှင့် “--strace” ကန့်သတ်ဘောင်များအတွက် ပံ့ပိုးမှုကို stderr သို့ function calls များအားလုံးနှင့် system calls များအကြောင်း အချက်အလက်ထုတ်ပေးရန်အတွက် executable files များသို့ ပေါင်းထည့်ထားပါသည်။
  • closefrom() စနစ်ခေါ်ဆိုမှုအတွက် ပံ့ပိုးမှုထည့်သွင်းထားသည်၊ ပံ့ပိုးပေးထားသည် Linux 5.9+၊ FreeBSD 8+ နှင့် OpenBSD။
  • ပလက်ဖောင်းပေါ် Linux vDSO (virtual dynamic shared object) ယန္တရားကို အသုံးပြုခြင်းဖြင့် clock_gettime နှင့် gettimeofday call များ၏ စွမ်းဆောင်ရည်ကို ၁၀ ဆအထိ မြှင့်တင်ထားပြီး ၎င်းသည် system call handler ကို user space သို့ ရွှေ့နိုင်ပြီး context switch များကို ရှောင်ရှားနိုင်သည်။
  • ရှုပ်ထွေးသော ဂဏန်းများဖြင့် လုပ်ဆောင်ရန်အတွက် သင်္ချာလုပ်ဆောင်ချက်များကို Musl စာကြည့်တိုက်မှ ရွှေ့ထားသည်။ သင်္ချာဆိုင်ရာ လုပ်ဆောင်ချက်များစွာ၏ လုပ်ဆောင်မှုကို အရှိန်မြှင့်ခဲ့သည်။
  • nointernet() လုပ်ဆောင်ချက်သည် ကွန်ရက်စွမ်းဆောင်ရည်များကို ပိတ်ရန် အဆိုပြုထားသည်။
  • နောက်ဆက်တွဲစာကြောင်းများအတွက် ထိရောက်စွာထည့်သွင်းထားသော လုပ်ဆောင်ချက်အသစ်များ- နောက်ဆက်တွဲ၊ appendf၊ appendr၊ appends၊ appendw၊ appendz၊ kappendf၊ kvappendf နှင့် vappendf။
  • မြင့်မားသောအခွင့်ထူးများဖြင့် အလုပ်လုပ်ရန် ဒီဇိုင်းထုတ်ထားသည့် kprintf() လုပ်ဆောင်ချက်မိသားစု၏ အကာအကွယ်ဗားရှင်းကို ထည့်သွင်းထားသည်။
  • အကောင်အထည်ဖော်မှု၏ စွမ်းဆောင်ရည်ကို သိသိသာသာ မြှင့်တင်ပေးခြင်း SSL ကို, SHA, curve25519 နှင့် RSA။

source: opennet.ru

DDoS ကာကွယ်ရေး၊ VPS VDS ဆာဗာများပါသည့် ဆိုက်များအတွက် ယုံကြည်စိတ်ချရသော hosting ကို ဝယ်ယူပါ။ 🔥 DDoS ကာကွယ်မှု၊ VPS VDS ဆာဗာများပါရှိသော ယုံကြည်စိတ်ချရသော ဝဘ်ဆိုက် hosting ကို ဝယ်ယူပါ | ProHoster