Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Salah satu cara untuk meminimalkan masalah keamanan adalah dengan mencegah kelebihan batas atas dan batas bawah bilangan bulat.
Luapan bilangan bulat terjadi ketika hasil operasi aritmatika lebih besar dari ruang memori jenis data yang diatur untuk menerimanya. Operasi ini menghasilkan pemotongan bilangan bulat dan hasil yang salah. Misalnya, jika Anda menambahkan dua bilangan bulat 32-bit yang menghasilkan nilai yang lebih besar dari
2^31-1, hasilnya dipotong agar pas dengan ruang bilangan bulat 32-bit, yang dapat menyebabkan perilaku tak terduga dalam kode Anda.Aliran bawah bilangan bulat terjadi ketika operasi, biasanya pengurangan, memberikan hasil yang salah. Misalnya, jika Anda mengurangi angka dari INT_MIN (nilai terkecil untuk bilangan bulat bertanda tangan 32-bit), hasilnya dipotong agar pas ke dalam ruang bilangan bulat 32-bit, yang juga dapat menyebabkan perilaku yang tidak terduga.
Transmisi antara dua jenis data juga dapat menyebabkan hasil yang salah karena pemotongan hasil yang tidak sesuai dengan ruang memori baru.
Pustaka ntintsafe menyediakan serangkaian fungsi C yang melakukan operasi aritmatika bilangan bulat aman dengan pemeriksaan batas untuk mencegah luapan dan aliran bawah dalam kode mode kernel. Semua fungsi berada dalam file header ntintsafe.h , yang dikirim dengan Windows Driver Kit (WDK). Fungsi-fungsi ini sesuai dengan fungsi Windows IntSafe yang digunakan oleh kode aplikasi.
Anda menggunakan fungsi-fungsi ini untuk menghitung indeks atau ukuran buffer, atau untuk menghitung beberapa bentuk pemeriksaan batas lainnya. Fungsi dioptimalkan untuk kecepatan.
Fungsi bilangan bulat aman menawarkan keuntungan berikut:
Ukuran buffer tujuan selalu disediakan untuk fungsi untuk memastikan bahwa fungsi tidak menulis melewati akhir buffer.
Buffer dijamin berakhir dengan null, meskipun operasi memotong hasil yang diinginkan.
Semua fungsi mengembalikan NTSTATUS, dengan hanya satu kemungkinan kode keberhasilan (STATUS_SUCCESS) dan satu kemungkinan kondisi kesalahan (STATUS_INTEGER_OVERFLOW). Misalnya,
NTSTATUS status = RtlIntSub(INT_MIN, 1, &result);harus mengembalikan hasil = -2.147.483.649 tetapi angka ini tidak dapat diwakili dalam bidang 32-bit. Sebaliknya,resulttidak terdefinisi danstatusadalah STATUS_INTEGER_OVERFLOW, yang merupakan nilai status yang dikembalikan untuk melaporkan overflow dan underflow.
Pustaka ntintsafe memiliki dua kategori fungsi:
Fungsi konversi—Fungsi ini melakukan konversi antara dua jenis data.
Fungsi aritmatika—Fungsi ini melakukan operasi penambahan, pengurangan, dan perkalian untuk setiap jenis data.