Pengembang LLVM mengusulkan penanganan buffer yang aman di C++

Logo LLVM

LLVM merupakan framework untuk mengembangkan compiler sekaligus membantu membangun bahasa pemrograman baru dan menyempurnakan bahasa yang sudah ada.

Los pengembang proyek LLVM mengusulkan sejumlah perubahan yang bertujuan untuk memperkuat keamanan dari proyek-proyek C + + misi kritis dan menyediakan sarana untuk menghilangkan kesalahan yang disebabkan oleh buffer overruns.

Oleh karena itu, proposal yang mereka rilis berfokus pada pekerjaan di dua area khususnya: menyediakan model pengembangan yang memungkinkan bekerja secara aman dengan buffer dan bekerja untuk memperkuat keamanan pustaka fungsi standar libc++.

Disebutkan bahwa model pemrograman aman yang diusulkan untuk C++ «adalah menggunakan kelas yang disediakan oleh pustaka standar saat bekerja dengan buffer alih-alih memanipulasi pointer mentah». Misalnya, diusulkan untuk menggunakan kelas std::array, std::vector, dan std::span, yang akan ditambahkan dengan pemeriksaan runtime untuk memori yang dialokasikan di luar batas.

Tujuan kami adalah meningkatkan keamanan basis kode C++ yang penting. Untuk ini kami berencana untuk mengerjakan dua ide.

Pustaka Standar C++ yang Dikeraskan
Model Pemrograman Penyangga Aman C++ dan Alat Adopsi
Libc++ yang dikeraskan dimaksudkan untuk membuat antarmuka pustaka standar C++ lebih aman secara umum.

Model pemrograman buffer aman C++ bersama dengan libc++ yang diperkeras menyediakan mitigasi runtime dari akses memori di luar batas. Alat adopsi akan mengotomatiskan migrasi kode ke model pemrograman baru ini.

Selain itu, juga disebutkan bahwa untuk memerangi praktik pemrograman "berbahaya" dalam dentang, jika mengusulkan untuk mengeluarkan peringatan kompiler untuk semua operasi aritmatika pointer, mirip dengan peringatan linter dentang-rapi saat menggunakan tanda "cppcoreguidelines-pro-bounds-pointer-arithmetic", dukungan yang akan muncul di LLVM 16. Untuk mengaktifkan peringatan tersebut, tanda terpisah akan ditambahkan ke dentang, tidak aktif secara default .

Direncanakan untuk menerapkan mode perlindungan opsional di libc++, yang, ketika diaktifkan, akan mendeteksi beberapa situasi yang mengarah ke perilaku tidak terdefinisi saat runtime. Misalnya, di kelas std::span dan std::vektor, akses di luar batas akan dipantau, dalam hal ini program akan gagal.

Pemeriksaan runtime tambahan ini akan dikelompokkan ke dalam beberapa kategori yang dapat dikontrol secara terpisah. Tujuannya adalah agar vendor yang mengirimkan libc++ pada platform mereka dapat memutuskan pemeriksaan mana yang akan diaktifkan di library pengiriman (jika ada), bergantung pada tingkat keamanan yang diinginkan.

Pengembang percaya bahwa menambahkan perubahan seperti itu akan membuat libc++ sesuai dengan standar C++, karena pilihan cara menangani kasus perilaku tidak terdefinisi terletak pada pengembang perpustakaan, yang dapat, antara lain, memperlakukan perilaku tidak terdefinisi sebagai kunci yang memerlukan program untuk KELUAR.

itu pemeriksaan runtime di libc++ direncanakan untuk dibagi menjadi beberapa kategori yang dapat dimasukkan satu per satu. Beberapa pemeriksaan yang disarankan yang tidak menghasilkan operasi yang lebih kompleks atau perubahan ABI sudah diterapkan dalam mode aman (mode aman) libc++.

Untuk mengulangi, tujuan utamanya adalah agar perpustakaan yang dikirimkan memungkinkan pemeriksaan ini dalam produksi; ini bukan fitur "debug saja", meskipun pada akhirnya akan menggantikan "mode debug" yang sudah lama rusak.

Selain itu, direncanakan untuk menyiapkan satu set alat koreksi kode yang akan memungkinkan variabel diganti dengan pointer mentah dalam kontainer dan untuk menerapkan penangan alternatif dalam situasi di mana kontainer tidak dapat secara langsung menggantikan pointer (misalnya, konstruksi "if(array_pointer)" dapat dikonversi menjadi "if(span.data ( )»).Pengaturan dapat diterapkan tidak hanya ke variabel lokal, tetapi juga untuk mengetik parameter dengan pointer.

Disebutkan juga bahwa sedang mempertimbangkan "pemeriksa penganalisis statis dentang" sensitif rute yang memperingatkan jika std::rentang dibangun dari wadah yang lebih kecil dari ukuran yang ditentukan dalam konstruktor rentang. Pemeriksa tersebut mandiri dan berguna dengan sendirinya, jika semuanya berjalan dengan baik, itu akan diaktifkan secara default untuk semua pengguna

Akhirnya jika Anda tertarik untuk mengetahui lebih banyak tentangnya, Anda dapat memeriksa detailnya di link berikut.


tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Bertanggung jawab atas data: AB Internet Networks 2008 SL
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.