Razvijalci LLVM predlagajo varno obdelavo medpomnilnika v C++

Logotip LLVM

LLVM je ogrodje za razvoj prevajalnikov ter pomoč pri gradnji novih programskih jezikov in izboljšanju obstoječih jezikov.

P razvijalci projekta LLVM so predlagali številne spremembe, namenjene krepitvi varnosti projektov C + + ključnega pomena in zagotavljajo sredstva za odpravo napak, ki jih povzročajo prekoračitve medpomnilnika.

Kot tak se predlog, ki so ga objavili, osredotoča predvsem na delo na dveh področjih: zagotavljanje razvojnega modela, ki omogoča varno delo z vmesnimi pomnilniki, in delo za krepitev varnosti knjižnice standardnih funkcij libc++.

Omenjeno je, da predlagani model varnega programiranja za C++ «je uporaba razredov, ki jih ponuja standardna knjižnica, pri delu z vmesnimi pomnilniki namesto manipuliranja z neobdelanimi kazalci». Na primer, predlaga se uporaba razredov std::array, std::vector in std::span, ki bodo dodani s preverjanjem med izvajanjem za dodeljeni pomnilnik zunaj meja.

Naš cilj je izboljšati varnost kritičnih kodnih baz C++. Za to nameravamo delati na dveh zamislih.

Utrjena standardna knjižnica C++
Model programiranja in orodja za varno medpomnilnik C++
Utrjeni libc++ je namenjen temu, da naredi vmesnike standardne knjižnice C++ na splošno bolj varne.

Programski model varnega vmesnega pomnilnika C++ skupaj z utrjenim libc++ zagotavlja ublažitev dostopa do pomnilnika izven meja med izvajanjem. Orodja za prevzem bodo avtomatizirala selitev kode na ta novi programski model.

Poleg tega omenja še, da za boj proti "nevarnim" praksam programiranja v klancu, če predlaga izdajo opozoril prevajalnika za vse aritmetične operacije kazalca, podobno opozorilom linterja clang-tidy pri uporabi zastavice "cppcoreguidelines-pro-bounds-pointer-arithmetic", podpora za katero bo prikazana v LLVM 16. Za omogočanje takšnih opozoril bo klangu dodana ločena zastavica, ki je privzeto neaktivna .

Načrtovana je implementacija neobveznega zaščitnega načina v libc++, ki bo, ko je omogočen, zaznal nekatere situacije, ki vodijo do nedefiniranega vedenja med izvajanjem. Na primer v razredih std::span in std::vector, bo nadzorovan dostop izven meja in v tem primeru program ne bo uspel.

Ta dodatna preverjanja med izvajanjem bodo združena v več kategorij, ki jih je mogoče nadzorovati ločeno. Namen je, da se lahko prodajalec, ki pošilja libc++ na svoji platformi, odloči, katera preverjanja bo omogočila v knjižnici za pošiljanje (če sploh), odvisno od želene ravni varnosti.

Razvijalci verjamejo, da bo dodajanje takšnih sprememb ohranilo skladnost libc++ s standardi C++, saj je izbira, kako obravnavati primere nedefiniranega vedenja, v rokah razvijalcev knjižnice, ki lahko med drugim obravnavajo nedefinirano vedenje kot ključavnico, ki od programa zahteva, da izhod.

The izvajalni pregledi v libc++ naj bi bili razdeljeni v kategorije ki jih je mogoče vključiti posamično. Nekatera predlagana preverjanja, ki ne povzročijo bolj zapletenih operacij ali sprememb ABI, so že implementirana v varnem načinu libc++ (varen način).

Če ponovim, končni cilj je, da poslana knjižnica omogoči ta preverjanja v produkciji; to ni funkcija "samo za odpravljanje napak", čeprav bo sčasoma nadomestila dolgo pokvarjen "način za odpravljanje napak".

Poleg tega, predvidena je priprava nabora orodij za popravljanje kod ki bo omogočil zamenjavo spremenljivk z neobdelanimi kazalci v vsebnikih in uporabo alternativnih obdelovalcev v primerih, ko vsebnik ne more neposredno nadomestiti kazalca (na primer, konstrukt "if(array_pointer)" je mogoče pretvoriti v "if(span.data ( )»). Nastavitve je mogoče uporabiti ne samo za lokalne spremenljivke, ampak tudi za parametre tipa s kazalci.

Omenjeno je tudi, da razmišljajo o "preverjevalniku statičnega analizatorja Clang" route občutljiv, ki opozori, če std::span je sestavljen iz vsebnika, ki je manjši od velikosti, določene v konstruktorju razpona. Omenjeni pregledovalnik je samostojen in uporaben sam po sebi, če bo vse po sreči, bo privzeto omogočen za vse uporabnike

Končno če vas zanima več o tem, podrobnosti lahko preverite v naslednja povezava.


Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Odgovoren za podatke: AB Internet Networks 2008 SL
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.