Az LLVM projekt eszközöket fejleszt a C++-ban a puffer biztonságos kezelésére.

Az LLVM projekt fejlesztői számos változtatást javasoltak, melyek célja a C++ nyelven írt kritikus projektek biztonságának fokozása és a puffer túllépéséből adódó hibák kiküszöbölésére szolgáló eszközök biztosítása. A munka két irányra összpontosít: egy olyan fejlesztési modell biztosítására, amely lehetővé teszi a pufferrel való biztonságos munkavégzést, és a libc++ standard funkciókönyvtár védelmének fokozására.

A javasolt biztonságos programozási modell C++-hoz a standard könyvtár által biztosított osztályok használatát feltételezi a pufferekkel való munka során a nyers mutatók manipulálásával szemben. Például javasolt a std::array, std::vector és std::span osztályok alkalmazása, melyekbe beillesztésre kerül a memórián túli hozzáférések futásidőben történő ellenőrzése.

A veszélyes programozási technikák ellen a clang esetében a fordító figyelmeztetéseket javasol minden olyan mutatóval végzett aritmetikai művelethez, amelyek hasonlítanak a clang-tidy lintelő figyelmeztetéseihez, amelyeket a «cppcoreguidelines-pro-bounds-pointer-arithmetic» zászló használatakor adnak ki, és amelynek támogatása az LLVM 16 kiadásában megjelenik. Az ilyen figyelmeztetések aktiválásához a clang-hez egy külön zászló kerül hozzáadásra, amely alapértelmezés szerint nem aktív.

A libc++-ban terveznek egy opcionális megerősített védelmi módot megvalósítani, amelynek aktiválásakor a futásidő alatt figyelni fogják azokat a helyzeteket, amelyek meghatározhatatlan viselkedéshez vezetnek. Például a std::span és std::vector osztályokban figyelni fogják a memórián túli hozzáféréseket, és ha ilyen esetet észlelnek, a program leáll. A fejlesztők véleménye szerint az ilyen változások hozzáadása megőrzi a libc++ megfelelőségét a C++ szabványokkal, mivel a meghatározhatatlan viselkedés kezelésének módja a könyvtár fejlesztőihez tartozik, akik azt is értelmezhetik, hogy a meghatározhatatlan viselkedés hiba, ami a program leállítását igényli.

A végrehajtási ellenőrzések során előállított libc++-ban kategóriákra tervezik bontani azokat, amelyeket külön-külön lehet majd bekapcsolni. Az egyes javasolt ellenőrzések, amelyek nem bonyolítják a műveleteket vagy nem változtatják meg az ABI-t, már megvalósultak a libc++ biztonsági módján (safe mode).

Továbbiakban tervezik egy olyan eszközkészlet előkészítését, amely lehetővé teszi a kód korrekcióját: a nyers mutatókkal rendelkező változók konténerekre történő cseréjét és alternatív kezelők alkalmazását olyan helyzetekben, amikor a konténer nem helyettesítheti közvetlenül a mutatót (például az 'if(array_pointer)' kifejezés 'if(span.data()' -ra alakítható). A korrekciók nemcsak a helyi változókra alkalmazhatók, hanem a mutatókkal rendelkező típusparaméterekre is.

Forrás: opennet.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster