የኤልኤልቪኤም ፕሮጀክት በC++ ውስጥ ቋት ደህንነቱ የተጠበቀ አያያዝን ያዘጋጃል።

የኤልኤልቪኤም ፕሮጀክቱ አዘጋጆች የተልዕኮ-ወሳኝ C++ ፕሮጀክቶችን ደህንነት ለማጠናከር እና በማቋቋሚያ መደራረብ ሳቢያ የሚፈጠሩ ስህተቶችን ለማስወገድ የሚረዱ በርካታ ለውጦችን አቅርበዋል። ስራው በሁለት ዘርፎች ላይ ያተኮረ ነው፡ ከጠባቂዎች ጋር በደህና እንዲሰሩ የሚያስችልዎትን የእድገት ሞዴል ማቅረብ እና የ libc++ መደበኛ የተግባር ቤተመፃህፍት ደህንነትን በማጠናከር ላይ ነው።

ለC++ የታቀደው ደህንነቱ የተጠበቀ የፕሮግራሚንግ ሞዴል ባዶ ጠቋሚዎችን ከመጠቀም ይልቅ በመደበኛ ቤተ-መጽሐፍት የሚሰጡ ክፍሎችን መጠቀም ነው። ለምሳሌ፣ ከክልል ውጪ የተመደበውን የማህደረ ትውስታን የሩጫ ጊዜ በማጣራት የሚጨመሩትን std::array, std:: vector እና std:: span ክፍሎችን ለመጠቀም ታቅዷል።

በክላንግ ውስጥ ያሉ አደገኛ የፕሮግራም አወጣጥ ልምዶችን ለመዋጋት የ"cppcoreguidelines-pro-bounds-indexer-asrithmetic" ባንዲራ በሚጠቀሙበት ጊዜ እንደ Clag-tidy linter ማስጠንቀቂያዎች ሁሉ ለሁሉም የጠቋሚ የሂሳብ ስራዎች የማጠናከሪያ ማስጠንቀቂያዎችን ለመስጠት ሀሳብ ቀርቧል። የተለቀቀው LLVM 16. እንደዚህ አይነት ማስጠንቀቂያዎችን ለማንቃት የተለየ ባንዲራ ወደ ክላንግ ይጨመራል ይህም በነባሪነት የማይሰራ ነው።

በlibc++ ውስጥ የአማራጭ የጠንካራ ጥበቃ ሁነታን ተግባራዊ ለማድረግ ታቅዷል፣ይህም ሲነቃ በሩጫ ሰዓት ወደማይታወቅ ባህሪ የሚመሩ አንዳንድ ሁኔታዎችን ይይዛል። ለምሳሌ፣ በ std :: span እና std :: የቬክተር ክፍሎች ውስጥ ከወሰን ውጪ የሆነ መዳረሻ ክትትል ይደረግበታል፣ በዚህ አጋጣሚ ፕሮግራሙ ይበላሻል። ገንቢዎቹ እንደዚህ ያሉ ለውጦችን ማከል libc++ ከ C++ ደረጃዎች ጋር ያከብራል ብለው ያምናሉ ፣ ምክንያቱም ያልተገለጸ ባህሪ ጉዳዮችን እንዴት ማስተናገድ እንደሚቻል ምርጫው በቤተ-መጽሐፍት አዘጋጆች ላይ ነው ፣ ይህም ከሌሎች ነገሮች በተጨማሪ ፣ ያልተገለጸ ባህሪን እንደ ብልሽት የሚያስፈልገው ለመውጣት ፕሮግራም.

በ libc++ ውስጥ ያሉ የሩጫ ጊዜ ፍተሻዎች በተናጥል ሊካተቱ በሚችሉ ምድቦች ለመከፋፈል ታቅዷል። አንዳንድ የተጠቆሙት ቼኮች ይበልጥ ውስብስብ የሆኑ ኦፕሬሽኖችን ወይም ABI ለውጦችን የማያስከትሉ ቀድሞውኑ በlibc++ ደህንነቱ የተጠበቀ ሁነታ ላይ ተግባራዊ ሆነዋል።

በተጨማሪም ኮዱን ለማስተካከል የመሳሪያ ኪት ለማዘጋጀት ታቅዷል፣ ይህም ተለዋዋጮችን በባዶ ጠቋሚዎች በመያዣዎች ላይ ለመተካት እና ኮንቴይነሩ ጠቋሚውን በቀጥታ መተካት በማይችልበት ሁኔታ (ለምሳሌ “if (array_pointer)”) አማራጭ ተቆጣጣሪዎችን ተግባራዊ ለማድረግ ታቅዷል። ኮንስትራክሽን ወደ "if (span.data ()") ሊቀየር ይችላል ማስተካከያዎች በአካባቢያዊ ተለዋዋጮች ላይ ብቻ ሳይሆን መለኪያዎችን በጠቋሚዎች ለመተየብም ይቻላል.

ምንጭ: opennet.ru

አስተያየት ያክሉ