Projekti LLVM zhvillon mjete për një punë të sigurt me bufetë në C++

Zhvilluesit e projektit LLVM propozuan një sërë ndryshimesh të drejtuara drejt përmirësimit të sigurisë së projekteve kritikë në gjuhën C++ dhe ofrimin e mjeteve për të eliminuar gabimet të shkaktuara nga dalja jashtë kufijve të mundshëm të bufetëve. Puna përqendrohet në dy drejtimet: ofrimi i një modeli zhvillimi që lejon punë të sigurt me bufetë dhe realizimi i punës për forcimin e mbrojtjes së bibliotekës standarde të funksioneve libc++.

Modeli i propozuar i programimit të sigurt për C++ parashikon përdorimin e klasave të ofruara nga biblioteka standarde kur punoni me bufetë, në vend të manipulimeve me tregues të pastër. Për shembull, propozohet përdorimi i klasave std::array, std::vector dhe std::span, në të cilat do të shtohet një kontroll për daljen jashtë kufijve të memorie të alokuar, që do të bëhet gjatë ekzekutimit.

PĂ«r tĂ« luftuar praktikat e rrezikshme tĂ« programimit nĂ« clang, kĂ«shillohet qĂ« tĂ« lĂ«shohen paralajmĂ«rime kompajleri pĂ«r tĂ« gjitha operacionet aritmetike me tregues, tĂ« ngjashme me paralajmĂ«rimet e linter-it clang-tidy, tĂ« lĂ«shuara kur pĂ«rdoret flagu “cppcoreguidelines-pro-bounds-pointer-arithmetic”, pĂ«rkrahjen e tĂ« cilit do ta ketĂ« versioni LLVM 16. PĂ«r tĂ« pĂ«rfshirĂ« paralajmĂ«rime tĂ« ngjashme nĂ« clang, do tĂ« shtohet njĂ« flag i veçantĂ«, qĂ« nuk Ă«shtĂ« aktiv nga fillimi.

Në libc++ planifikohet implementimi i një mode opsionale të mbrojtjes së forcuar, ku, kur aktivizohet, do të kapen disa situata që çojnë në sjellje të pabesueshme gjatë ekzekutimit. Për shembull, në klasat std::span dhe std::vector do të monitorohet aksesimi përtej zonës së alokuar të memories, dhe në rastin e zbulimit të tij, programi do të përfundojë në mënyrë të paplanifikuar. Zhvilluesit besojnë se shtimi i ndryshimeve të tilla do të ruajë përputhshmërinë e libc++ me standardet C++, sepse zgjedhja e metodës për trajtimin e rasteve të sjelljes së pabesueshme është në duar të zhvilluesve të bibliotekës, të cilët gjithashtu mund ta interpretojnë sjelljen e pabesueshme si një dështim që kërkon ndalimin e programit.

Kontrollat e prodhuara gjatë ekzekutimit do të kategorizohen në kategori që mund të aktivizohen veçmas. Disa nga kontrollat e propozuara që nuk çojnë në ndërlikimin e operacioneve ose në ndryshimin e ABI-së janë tashmë të implementuara në kuadër të modit të sigurt libc++.

Për më tepër, planifikohet përgatitja e një mjeti për rregullimin e kodit, i cili do të lejojë zëvendësimin e variablave me tregues të pastër me konteinerë dhe të aplikojë trajtues alternativë në situata kur konteineri nuk mund të zëvendësojë drejtpërdrejt treguesin (p.sh., struktura "if(array_pointer)" mund të transformohet në "if(span.data())"). Rregullimet mund të aplikohen jo vetëm për variablat lokalë, por edhe për parametrat e tipeve me tregues.

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster