Mashruuca LLVM wuxuu horumariyaa maaraynta badbaadada leh ee C++

Soosaarayaasha mashruuca LLVM waxay soo jeediyeen dhowr isbedel oo looga dan leeyahay in lagu xoojiyo amniga hadafyada muhiimka ah ee mashaariicda C++ iyo bixinta hab lagu baabi'iyo khaladaadka ay sababto xad dhaafka. Shaqadu waxay diiradda saaraysaa laba qaybood: bixinta qaab horumarineed oo kuu ogolaanaya inaad si badbaado leh ula shaqeyso bakhaarrada, iyo ka shaqaynta adkaynta amniga maktabadda caadiga ah ee libc++.

Qaabka barnaamijka badbaadada leh ee la soo jeediyay ee C++ waa in la isticmaalo fasallada ay bixiso maktabadda caadiga ah marka la shaqaynayo kaydiyeyaasha halkii laga isticmaali lahaa tilmaame qaawan. Tusaale ahaan, waxaa la soo jeediyay in la isticmaalo std :: array, std :: vector , iyo std :: fasalada span , kuwaas oo lagu dari doono hubinta wakhtiga orda ee xusuusta ka baxsan xadka.

Si loola dagaallamo dhaqamada barnaamijyada halista ah ee qabiilka, waxaa la soo jeediyay in la soo saaro digniinaha isu-duwaha dhammaan hawlgallada xisaabinta tilmaame, oo la mid ah digniinaha qabiilka-tidy marka la isticmaalayo calanka "cppcoreguidelines-pro-bounds-pointer-arithmetic", taageero taas oo ka soo muuqan doonta sii daynta LLVM 16. Si digniinaha noocaas ah awood loo siiyo, calan gooni ah ayaa lagu dari doonaa qabiil, kaas oo aan si caadi ah u shaqayn.

Waxaa la qorsheeyay in lagu dhaqan geliyo habka ilaalinta adag ee ikhtiyaarka ah ee libc++, kaas oo, marka la awoodo, qaban doona xaaladaha qaarkood oo u horseedaya dabeecad aan la qeexin wakhtiga runtime. Tusaale ahaan, std :: taako iyo std :: fasallada vector, gelitaanka ka baxsan xuduudka ayaa la kormeeri doonaa, markaasoo barnaamijku burburi doono. Horumariyayaashu waxay aaminsan yihiin in ku darista isbeddelada noocan oo kale ah ay ilaalin doonto libc++ u hoggaansanaanta heerarka C++, maadaama doorashada sida loo maareeyo kiisaska habdhaqanka aan la qeexin ay la mid tahay horumarinta maktabadda, taas oo laga yaabo, oo ay ka mid yihiin waxyaabo kale, tarjumaan dabeecad aan la qeexin sida shil u baahan barnaamijka ka bixida.

Jeegaga runtime ee libc++ waxa la qorsheeyay in loo qaybiyo qaybo si gaar ah loogu dari karo. Qaar ka mid ah jeegaga la soo jeediyay ee aan keenin hawlgallo kakan ama isbeddelada ABI ayaa mar horeba lagu hirgeliyay qaabka badbaadada leh ee libc++.

Intaa waxaa dheer, waxaa la qorsheeyay in la diyaariyo qalab si loo saxo koodka, taas oo kuu oggolaanaysa inaad ku beddesho doorsoomayaasha tilmaame qaawan oo ku jira weelasha oo aad codsato maamulayaal kale marka ay jiraan xaalado uusan weelku si toos ah u beddeli karin tilmaame (tusaale, "if (array_pointer)" Dhisidda waxa loo rogi karaa “if (span.data ()”) Wax-ka-habaynta laguma dabaqi karo oo keliya doorsoomayaasha maxalliga ah, laakiin sidoo kale in lagu qoro cabbirro leh tilmaameyaal.

Source: opennet.ru

Add a comment