ለተንቀሳቃሽ ፈጻሚዎች የተገነባው የኮስሞፖሊታን 2.0 መደበኛ ሲ ቤተ-መጽሐፍት መልቀቅ

የኮስሞፖሊታን 2.0 ፕሮጀክት መለቀቅ ታትሟል፣ መደበኛውን ሲ ቤተ-መጽሐፍት እና ሁለንተናዊ ተፈጻሚነት ያለው የፋይል ፎርማት በማዘጋጀት ለተለያዩ ኦፕሬቲንግ ሲስተሞች አስተርጓሚዎችን እና ቨርቹዋል ማሽኖችን ሳይጠቀሙ ፕሮግራሞችን ለማሰራጨት ሊያገለግል ይችላል። በጂሲሲ እና ክላንግ በማጠናቀር የተገኘው ውጤት በማንኛውም ሊኑክስ ስርጭት፣ማክኦኤስ፣ዊንዶውስ፣ፍሪቢኤስዲ፣ኦፕንቢኤስዲ፣ኔትቢኤስዲ እና ከቢዮስ ተብሎም ሊሰራ በሚችል በስታስቲክስ በተገናኘ ሁለንተናዊ executable ፋይል ተሰብስቧል። የፕሮጀክት ኮድ በ ISC ፍቃድ (ቀላል የ MIT/BSD ስሪት) ስር ይሰራጫል።

ሁለንተናዊ ፈጻሚ ፋይሎችን ለማመንጨት መያዣው ለተለያዩ ኦፕሬቲንግ ሲስተሞች (PE ፣ ELF ፣ MACHO ፣ OPENBSD) የተወሰኑ ክፍሎችን እና ራስጌዎችን በአንድ ፋይል በማጣመር በዩኒክስ ፣ ዊንዶውስ እና ማክሮስ ውስጥ ጥቅም ላይ የዋሉ የተለያዩ ቅርጸቶችን በማጣመር ላይ የተመሠረተ ነው። አንድ ነጠላ ተፈፃሚ ፋይል በዊንዶውስ እና ዩኒክስ ሲስተሞች ላይ መስራቱን ለማረጋገጥ ስልቱ የዊንዶውስ ፒኢ ፋይሎችን እንደ ሼል ስክሪፕት ማድረግ ሲሆን ይህም ቶምፕሰን ሼል የ"#!" ስክሪፕት ማርክን የማይጠቀም መሆኑን በመጠቀም ነው። ብዙ ፋይሎችን ያካተቱ ፕሮግራሞችን ለመፍጠር (ሁሉንም ሀብቶች ወደ አንድ ፋይል ማገናኘት) በልዩ ሁኔታ በተዘጋጀ የዚፕ ማህደር መልክ የሚተገበር ፋይል መፈጠርን ይደግፋል። የታቀደው ቅርጸት እቅድ (ለምሳሌ 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 ክፍልፋዮች… ክፍት ማስታወሻ… የማቻሆ ራስጌዎች… ኮድ እና ውሂብ… ዚፕ ማውጫ…

በፋይሉ መጀመሪያ ላይ “MZqFpD” የሚለው መለያ ተጠቁሟል ፣ እሱም እንደ የዊንዶውስ ፒኢ ቅርጸት ራስጌ ነው ። ይህ ቅደም ተከተል በ "ፖፕ% r10" መመሪያ ውስጥም ተስተካክሏል. jno 0x4a; jo 0x4a፣ እና መስመር "\177ELF" ወደ መመሪያው "jg 0x47" ወደ መግቢያ ነጥብ ለማስተላለፍ የሚያገለግሉት። የዩኒክስ ሲስተሞች የኤክሰክ ትዕዛዙን የሚጠቀም የሼል ኮድ ያካሂዳሉ፣ የሚፈፀመውን ኮድ ስሙ ባልተጠቀሰ ፓይፕ ውስጥ በማለፍ። የታቀደው ዘዴ ገደብ የቶምፕሰን ሼል ተኳሃኝነት ሁነታን የሚደግፉ ዛጎሎችን በመጠቀም በዩኒክስ መሰል ኦፕሬቲንግ ሲስተሞች ላይ የማስኬድ ችሎታ ነው።

የqemu-x86_64 ጥሪ ተጨማሪ ተንቀሳቃሽነት ይሰጣል እና ለ x86_64 አርክቴክቸር የተጠናቀረው ኮድ x86 ባልሆኑ የመሣሪያ ስርዓቶች ላይ እንደ Raspberry Pi ቦርዶች እና በARM ፕሮሰሰር በተገጠመላቸው አፕል መሳሪያዎች ላይ እንዲሰራ ይፈቅዳል። ፕሮጀክቱ ያለ ኦፐሬቲንግ ሲስተም (ባዶ ብረት) የሚሰሩ ራሳቸውን የቻሉ አፕሊኬሽኖችን ለመፍጠር ሊያገለግል ይችላል። በእንደዚህ አይነት አፕሊኬሽኖች ውስጥ ቡት ጫኝ ከሚተገበረው ፋይል ጋር ተያይዟል, እና ፕሮግራሙ እንደ ማስነሻ ስርዓተ ክወና ይሰራል.

በፕሮጀክቱ የተገነባው መደበኛ C ላይብረሪ ሊቢሲ 2024 ተግባራትን ይሰጣል (በመጀመሪያው እትም 1400 ያህል ተግባራት ነበሩ)። በአፈጻጸም ረገድ ኮስሞፖሊታን ልክ እንደ ግሊቢክ በፍጥነት ይሰራል እና ከሙስል እና ከኒውሊብ ቀድሟል። እንደ memcpy እና strlen ያሉ ተደጋግመው የሚጠሩ ተግባራትን ለማመቻቸት የ"ማታለል-ታች አፈጻጸም" ቴክኒክ በተጨማሪ ጥቅም ላይ ይውላል፣ ይህም ተግባሩን ለመጥራት ማክሮ ማሰሪያ ጥቅም ላይ ይውላል፣ በዚህ ውስጥ ኮምፕሌተሩ በኮድ አፈፃፀም ውስጥ ስለሚሳተፉ የሲፒዩ መመዝገቢያዎች መረጃ ይሰጠዋል። ሂደት, ይህም የሲፒዩ ሁኔታን በሚቆጥብበት ጊዜ ሊለወጡ የሚችሉ መዝገቦችን ብቻ በማስቀመጥ ሀብቶችን ለመቆጠብ ያስችላል.

በአዲሱ ልቀት ላይ የተደረጉ ለውጦች የሚከተሉትን ያካትታሉ፡-

  • በዚፕ ፋይል ውስጥ የውስጥ ግብዓቶችን የማግኘት ዘዴው ተለውጧል (ፋይሎችን ሲከፍቱ፣ አሁን ዚፕ ከመጠቀም ይልቅ የተለመደው /ዚፕ/... ዱካዎች ጥቅም ላይ ይውላሉ)። በተመሳሳይም በዊንዶውስ ውስጥ ዲስኮችን ለመድረስ በ "C:/..." ፈንታ እንደ "/ c/..." ያሉ መንገዶችን መጠቀም ይቻላል.
  • አዲስ የAPE (በእውነቱ ተንቀሳቃሽ ፈጻሚ) ጫኚ ቀርቧል፣ ይህም ሁለንተናዊ ተፈፃሚ የሆኑ ፋይሎችን ቅርጸት ይገልጻል። አዲሱ ጫኝ ኤምኤምፕን በመጠቀም ፕሮግራሙን በማህደረ ትውስታ ውስጥ ለማስቀመጥ እና ይዘቱን በበረራ ላይ አይለውጥም ። አስፈላጊ ከሆነ, ሁለንተናዊ ፈጻሚው ፋይል ከግል መድረኮች ጋር የተሳሰሩ ወደ መደበኛ ፈጻሚ ፋይሎች ሊቀየር ይችላል.
  • በሊኑክስ መድረክ ላይ የAPE ፕሮግራሞችን ለማሄድ binfmt_misc kernel moduleን መጠቀም ይቻላል። binfmt_misc መጠቀም በጣም ፈጣኑ የማስጀመሪያ ዘዴ እንደሆነ ተጠቅሷል።
  • ለሊኑክስ በOpenBSD ፕሮጀክት የተገነቡ የቃል ኪዳን() እና የመክፈቻ() ስርዓት ጥሪዎችን ተግባራዊነት ተግባራዊ ለማድረግ ቀርቧል። ኤፒአይ እነዚህን ጥሪዎች በC፣ C++፣ Python እና Redbean ውስጥ ባሉ ፕሮግራሞች እንዲሁም የዘፈቀደ ሂደቶችን ለመለየት የ pledge.com አገልግሎት ቀርቧል።
  • ግንባታው Landlock Make utilityን ይጠቀማል - የጂኤንዩ ሜክ እትም በበለጠ ጥብቅ የጥገኝነት ፍተሻ እና የላንድሎክ ሲስተም ጥሪን በመጠቀም ፕሮግራሙን ከተቀረው ስርዓቱ ለማግለል እና የመሸጎጫ ቅልጥፍናን ለማሻሻል። እንደ አማራጭ፣ በመደበኛ GNU Make የመገንባት ችሎታው እንደተጠበቀ ነው።
  • የመልቲ ስክሪፕት ተግባራት ተተግብረዋል - _spawn() እና _join()፣ እነዚህም ከተለያዩ ኦፕሬቲንግ ሲስተሞች ጋር በተያያዙ ኤፒአይዎች ላይ ሁለንተናዊ ትስስር ናቸው። የPOSIX Threads ድጋፍን ተግባራዊ ለማድረግም እየተሰራ ነው።
  • ለእያንዳንዱ ክር (TLS፣ Thread-Local Storage) የተለየ ማከማቻ ለመጠቀም የ_Thread_local ቁልፍ ቃል መጠቀም ይቻላል። በነባሪ፣ የC runtime TLSን ለዋናው ክር ያስጀምረዋል፣ ይህም አነስተኛውን የማስፈጸሚያ መጠን ከ12 ወደ 16 ኪባ እንዲጨምር አድርጓል።
  • ስለ ሁሉም የተግባር ጥሪዎች እና የስርዓት ጥሪዎች ወደ stderr መረጃ ለማውጣት ለ "--ftrace" እና "--strace" መለኪያዎች ድጋፍ ወደ ፈጻሚ ፋይሎች ተጨምሯል።
  • በLinux 5.9+፣ FreeBSD 8+ እና OpenBSD ላይ የሚደገፈው ለመዝጋት() የስርዓት ጥሪ ድጋፍ ታክሏል።
  • በሊኑክስ መድረክ ላይ የ clock_gettime እና የእለተ-ቀን ጥሪዎች አፈጻጸም እስከ 10 ጊዜ ጨምሯል vDSO (ምናባዊ ተለዋዋጭ የተጋራ ነገር) ዘዴን በመጠቀም የስርዓት ጥሪ ተቆጣጣሪውን ወደ ተጠቃሚ ቦታ ለማንቀሳቀስ እና የአውድ መቀየሪያዎችን ለማስወገድ ያስችላል።
  • ከተወሳሰቡ ቁጥሮች ጋር ለመስራት የሂሳብ ተግባራት ከሙስሊሙ ቤተ-መጽሐፍት ተወስደዋል። የበርካታ የሂሳብ ተግባራት ስራ ተፋጥኗል።
  • የኔትዎርክ ችሎታዎችን ለማሰናከል የኖይነኔት() ተግባር ቀርቧል።
  • ሕብረቁምፊዎችን በብቃት ለማያያዝ አዲስ ተግባራት ታክለዋል፡- አባሪ፣ አባሪ፣ አባሪ፣ አባሪ፣ አባሪ፣ አባሪ፣ kappendf፣ kvappendf እና vappendf።
  • ከፍ ካሉ መብቶች ጋር ለመስራት የተነደፈ የkprintf() ቤተሰብ ተግባራት የተጠበቀ ስሪት ታክሏል።
  • በከፍተኛ ሁኔታ የተሻሻለ የSSL፣ SHA፣ curve25519 እና RSA ትግበራዎች።

ምንጭ: opennet.ru

አስተያየት ያክሉ