Zhvilluesit e LLVM propozojnë trajtim të sigurt të buferit në C++

Logoja e LLVM

LLVM është një kornizë për zhvillimin e përpiluesve, si dhe për të ndihmuar në ndërtimin e gjuhëve të reja programimi dhe përmirësimin e gjuhëve ekzistuese.

L zhvilluesit e projektit LLVM propozuan një numër ndryshimesh që synojnë forcimin e sigurisë të projekteve C + + misioni kritik dhe të sigurojë një mjet për të eliminuar gabimet e shkaktuara nga tejkalimet e tamponit.

Si i tillë, propozimi që ata lëshuan fokusohet në punën në dy fusha në veçanti: ofrimin e një modeli zhvillimi që lejon punën e sigurt me buferët dhe punën për të forcuar sigurinë e bibliotekës së funksioneve standarde libc++.

Përmendet se modeli i propozuar i programimit të sigurt për C++ «është përdorimi i klasave të ofruara nga biblioteka standarde kur punoni me buferë në vend të manipulimit të treguesve të papërpunuar». Për shembull, propozohet përdorimi i klasave std::array, std::vector dhe std::span, të cilat do të shtohen me një kontroll të kohës së ekzekutimit për memorien e alokuar jashtë kufijve.

Qëllimi ynë është të përmirësojmë sigurinë e bazave kritike të kodit C++. Për këtë ne planifikojmë të punojmë në dy ide.

Biblioteka standarde e ngurtësuar e C++
C++ Modeli i Programimit të Sigurt Buffer dhe Mjetet e Adoptimit
Hardened libc++ synon t'i bëjë ndërfaqet standarde të bibliotekës C++ më të sigurta në përgjithësi.

Modeli i programimit të sigurt të tamponit të C++ së bashku me libc++ të ngurtësuar sigurojnë zbutjen e kohës së funksionimit të aksesit të memories jashtë kufijve. Mjetet e miratimit do të automatizojnë migrimin e kodit në këtë model të ri programimi.

Përveç kësaj, përmendet edhe se për të luftuar praktikat e programimit "të rrezikshme". në tingëllimë, nëse propozon lëshimin e paralajmërimeve të përpiluesit për të gjitha veprimet aritmetike të treguesve, të ngjashme me paralajmërimet e linterit të tingëllimit kur përdorni flamurin "cppcoreguidelines-pro-bounds-pointer-arithmetic", mbështetja për të cilën do të shfaqet në LLVM 16. Për të aktivizuar paralajmërime të tilla, një flamur i veçantë do t'i shtohet tingëllimit, joaktiv si parazgjedhje .

Është planifikuar të zbatohet një mënyrë mbrojtjeje opsionale në libc++, i cili, kur aktivizohet, do të zbulojë disa situata që çojnë në sjellje të papërcaktuar në kohën e ekzekutimit. Për shembull, në klasa std::span dhe std::vektor, do të monitorohet një akses jashtë kufijve, në të cilin rast programi do të dështojë.

Këto kontrolle shtesë të kohës së ekzekutimit do të grupohen në disa kategori që mund të kontrollohen veçmas. Synimi është që një shitës që dërgon libc++ në platformën e tyre mund të vendosë se cilat kontrolle të aktivizohen në bibliotekën e transportit (nëse ka), në varësi të nivelit të sigurisë së dëshiruar.

Zhvilluesit besojnë se shtimi i ndryshimeve të tilla do ta mbajë libc++ në përputhje me standardet C++, pasi zgjedhja se si të trajtohen rastet e sjelljes së papërcaktuar i takon zhvilluesve të bibliotekës, të cilët, ndër të tjera, mund ta trajtojnë sjelljen e papërcaktuar si një bllokim që kërkon që programi të dalje.

L kontrollet e kohës së funksionimit në libc++ janë planifikuar të ndahen në kategori që mund të përfshihen individualisht. Disa nga kontrollet e sugjeruara që nuk rezultojnë në operacione më komplekse ose ndryshime ABI janë zbatuar tashmë në modalitetin e sigurt të libc++ (modaliteti i sigurt).

Për të përsëritur, qëllimi përfundimtar është që biblioteka e dërguar të mundësojë këto kontrolle në prodhim; kjo nuk është një veçori "vetëm korrigjimi", megjithëse përfundimisht do të zëvendësojë "modalitetin e korrigjimit" të prishur gjatë.

Përveç kësaj, është planifikuar të përgatitet një grup mjetesh për korrigjimin e kodit i cili do të lejojë që variablat të zëvendësohen me tregues të papërpunuar në kontejnerë dhe të aplikojnë mbajtës alternativë në situata kur kontejneri nuk mund të zëvendësojë drejtpërdrejt treguesin (për shembull, konstrukti "if(array_pointer)" mund të konvertohet në "if(span.data ( )»).Cilësimet mund të aplikohen jo vetëm për variablat lokale, por edhe për të shtypur parametrat me tregues.

Gjithashtu përmendet se po shqyrtojnë një "kontrollues analizues statik të zhurmshëm" route sensitive që paralajmëron nëse std::span është ndërtuar nga një kontejner që është më i vogël se madhësia e specifikuar në konstruktorin e hapësirës. Kontrolluesi i përmendur është i pavarur dhe i dobishëm më vete, nëse gjithçka shkon mirë, ai do të aktivizohet si parazgjedhje për të gjithë përdoruesit

Më në fund nëse jeni të interesuar të dini më shumë për të, ju mund të kontrolloni detajet në lidhja vijuese.


Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: AB Internet Networks 2008 SL
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.