Proyék LLVM ngembangkeun alat pikeun damel sareng panyangga aman dina C ++

Pamekar tina proyék LLVM geus diusulkeun sababaraha parobahan aimed dina strengthening kaamanan misi-kritis C ++ proyék jeung nyadiakeun sarana pikeun ngaleungitkeun kasalahan disababkeun ku overruns of buffers. Karya ieu fokus kana dua wewengkon: nyadiakeun modél ngembangkeun anu ngamungkinkeun gawé aman jeung buffers, sarta digawé pikeun nguatkeun kaamanan libc ++ perpustakaan fungsi baku.

Modél programming aman anu diusulkeun pikeun C ++ ngalibatkeun ngagunakeun kelas anu disayogikeun ku perpustakaan standar nalika damel sareng panyangga tibatan ngamanipulasi pointer bulistir. Contona, diusulkeun ngagunakeun kelas std :: array, std :: vektor jeung std :: span, nu bakal nambahan hiji run-time dipariksa pikeun memori over-allocated.

Pikeun merangan prakték programming bahaya di clang, diusulkeun pikeun nembongkeun warnings kompiler pikeun sakabéh operasi arithmetic pointer, sarupa jeung clang-rapi linter warnings kaluaran nalika ngagunakeun "cppcoreguidelines-pro-wates-pointer-aritmetika" bandéra, rojongan nu bakal némbongan dina release LLVM 16. Pikeun ngaktipkeun warnings sapertos, a bandéra misah bakal ditambahkeun kana clang, teu aktip sacara standar.

Ieu rencanana pikeun nerapkeun hiji mode panyalindungan ditingkatkeun pilihan dina libc ++, nu, nalika diaktipkeun, bakal nyekel sababaraha kaayaan dina runtime nu ngakibatkeun kabiasaan undefined. Contona, dina std :: span jeung std :: kelas vektor, aksés memori kaluar-of-bounds bakal diawaskeun, sarta lamun kauninga, program bakal ngadat. Pamekar yakin yén nambihan parobahan sapertos kitu bakal ngajaga libc ++ saluyu sareng standar C ++, sabab pilihan kumaha nanganan kasus-kasus paripolah anu teu ditangtukeun aya dina pamekar perpustakaan, anu tiasa, diantarana, ngarawat paripolah anu henteu ditangtukeun salaku kagagalan, ngabutuhkeun program pikeun ngeureunkeun.

cék Runtime di libc ++ rencanana dibagi kana kategori nu bisa diaktipkeun individual. Sababaraha cék anu diusulkeun, anu henteu ngakibatkeun pajeulitna operasi atanapi parobihan kana ABI, parantos dilaksanakeun dina mode aman libc ++.

Salaku tambahan, rencanana pikeun nyiapkeun alat pikeun ngamutahirkeun kodeu, ngamungkinkeun anjeun pikeun ngagentos variabel sareng pointer bulistir sareng wadah sareng nganggo panangan alternatif dina kaayaan dimana wadahna teu tiasa langsung ngagentos pointer (contona, konstruksi "lamun (array_pointer)" tiasa. dirobah jadi "lamun (span.data) ()"). Pangaluyuan bisa dilarapkeun teu ukur keur variabel lokal, tapi ogé pikeun parameter tipe pointer.

sumber: opennet.ru

Tambahkeun komentar