Pembangun LLVM mencadangkan pengendalian penimbal yang selamat dalam C++

Logo LLVM

LLVM ialah rangka kerja untuk membangunkan penyusun serta membantu membina bahasa pengaturcaraan baharu dan menambah baik bahasa sedia ada.

The pemaju projek LLVM mencadangkan beberapa perubahan yang bertujuan untuk mengukuhkan keselamatan daripada projek-projek tersebut C + + misi kritikal dan menyediakan cara untuk menghapuskan ralat yang disebabkan oleh overrun penimbal.

Oleh itu, cadangan yang mereka keluarkan memfokuskan pada kerja dalam dua bidang khususnya: menyediakan model pembangunan yang membolehkan bekerja dengan selamat dengan penimbal dan berusaha untuk mengukuhkan keselamatan perpustakaan fungsi standard libc++.

Disebutkan bahawa model pengaturcaraan selamat yang dicadangkan untuk C++ «ialah menggunakan kelas yang disediakan oleh perpustakaan standard apabila bekerja dengan penimbal dan bukannya memanipulasi penunjuk mentah». Sebagai contoh, adalah dicadangkan untuk menggunakan kelas std::array, std::vector, dan std::span, yang akan ditambah dengan semakan masa jalan untuk memori yang diperuntukkan di luar sempadan.

Matlamat kami adalah untuk meningkatkan keselamatan asas kod C++ yang kritikal. Untuk ini kami merancang untuk mengusahakan dua idea.

Perpustakaan Standard C++ yang dikeraskan
Model Pengaturcaraan Penimbal Selamat dan Alat Penggunaan C++
Libc++ yang dikeraskan bertujuan untuk menjadikan antara muka perpustakaan standard C++ lebih selamat secara umum.

Model pengaturcaraan penimbal selamat C++ bersama-sama dengan libc++ yang dikeraskan menyediakan pengurangan masa jalan bagi akses memori di luar sempadan. Alat pakai akan mengautomasikan pemindahan kod ke model pengaturcaraan baharu ini.

Di samping itu, ia juga menyebut bahawa untuk memerangi amalan pengaturcaraan "berbahaya". dalam dentang, jika bercadang untuk mengeluarkan amaran pengkompil untuk semua operasi aritmetik penunjuk, serupa dengan amaran linter denting-kemas apabila menggunakan bendera "cppcoreguidelines-pro-bounds-pointer-arithmetic", sokongan untuknya akan muncul dalam LLVM 16. Untuk mendayakan amaran sedemikian, bendera berasingan akan ditambahkan pada denting, tidak aktif secara lalai .

Ia dirancang untuk melaksanakan mod perlindungan pilihan dalam libc++, yang, apabila didayakan, akan mengesan beberapa situasi yang membawa kepada gelagat tidak ditentukan pada masa jalan. Contohnya, dalam kelas std::span dan std::vector, akses di luar sempadan akan dipantau, dalam kes ini program akan gagal.

Semakan masa jalan tambahan ini akan dikumpulkan ke dalam beberapa kategori yang boleh dikawal secara berasingan. Tujuannya ialah vendor yang menghantar libc++ pada platform mereka boleh memutuskan semakan mana yang perlu didayakan dalam perpustakaan penghantaran (jika ada), bergantung pada tahap keselamatan yang diingini.

Pembangun percaya bahawa penambahan perubahan sedemikian akan memastikan libc++ mematuhi piawaian C++, kerana pilihan cara mengendalikan kes tingkah laku yang tidak ditentukan terletak pada pembangun perpustakaan, yang boleh, antara lain, menganggap tingkah laku tidak ditentukan sebagai kunci yang memerlukan program untuk keluar.

yang semakan masa jalan dalam libc++ dirancang untuk dibahagikan kepada kategori yang boleh dimasukkan secara individu. Beberapa semakan yang dicadangkan yang tidak menghasilkan operasi yang lebih kompleks atau perubahan ABI telah dilaksanakan dalam mod selamat libc++ (mod selamat).

Untuk mengulangi, matlamat utama adalah untuk perpustakaan yang dihantar untuk membolehkan semakan ini dalam pengeluaran; ini bukan ciri "nyahpepijat sahaja", walaupun ia akhirnya akan menggantikan "mod nyahpepijat" yang telah lama rosak.

Selain itu, ia dirancang untuk menyediakan satu set alat pembetulan kod yang akan membolehkan pembolehubah digantikan dengan penunjuk mentah dalam bekas dan menggunakan pengendali alternatif dalam situasi di mana bekas tidak boleh menggantikan penunjuk secara langsung (contohnya, binaan "if(array_pointer)" boleh ditukar kepada "if(span.data (). )»).Tetapan boleh digunakan bukan sahaja pada pembolehubah tempatan, tetapi juga untuk menaip parameter dengan penunjuk.

Disebutkan juga bahawa sedang mempertimbangkan "pemeriksa penganalisis statik dentang" laluan sensitif yang memberi amaran jika std::span dibina daripada bekas yang lebih kecil daripada saiz yang ditentukan dalam pembina span. Pemeriksa tersebut adalah serba lengkap dan berguna dengan sendirinya, jika semuanya berjalan lancar ia akan didayakan secara lalai untuk semua pengguna

Akhirnya sekiranya anda berminat untuk mengetahui lebih lanjut mengenainya, anda boleh menyemak butiran di pautan berikut.


Tinggalkan komen anda

Alamat email anda tidak akan disiarkan. Ruangan yang diperlukan ditanda dengan *

*

*

  1. Bertanggungjawab untuk data: AB Internet Networks 2008 SL
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.