Anda di halaman 1dari 3

integer overflow

Odometer rollover, bentuk mekanik integer overflow. Semua angka yang diatur ke
maksimum 9 dan kenaikan berikutnya dari digit putih menyebabkan riam carry-over
penambahan pengaturan semua angka 0 tetapi tidak ada digit lebih tinggi untuk
mengubah ke 1, sehingga me-reset counter ke nol. Ini membungkus sebagai lawan
jenuh.
Dalam pemrograman komputer , sebuah integer overflow terjadi ketika aritmatika
operasi upaya untuk menciptakan nilai numerik yang terlalu besar untuk diwakili
dalam ruang penyimpanan yang tersedia. Misalnya, mengambil mean aritmetik dari
dua angka dengan menambahkan mereka dan membaginya dengan dua, seperti yang
dilakukan di banyak algoritma pencarian , menyebabkan kesalahan jika jumlah
(meskipun tidak berarti yang dihasilkan) terlalu besar untuk diwakili, dan karenanya
overflows. [1 ] hasil yang paling umum dari sebuah meluap adalah bahwa bit
representable paling signifikan dari hasil disimpan; hasilnya dikatakan untuk
membungkus. Pada beberapa prosesor seperti GPU dan DSP , hasil jenuh ; yang, sekali
nilai maksimum tercapai, setiap upaya untuk meningkatkannya selalu mengembalikan
nilai integer maksimum.
Isi

1 Negara Asal

2 konsekuensi Keamanan

3 Teknik untuk mengurangi masalah bilangan bulat melimpah

4 Contoh

5 Lihat juga

6 Referensi

7 Pranala luar

Asal
The daftar lebar dari sebuah prosesor menentukan rentang nilai yang dapat diwakili.
Khas biner lebar daftar meliputi:
08-01

8 bit: maksimum nilai representable

Februari = 255

16 bit: maksimum nilai representable

32 bit: nilai representable maksimum 2


untuk komputer pribadi pada 2005 ),

64 bit: nilai representable maksimum 2 64-1 = 18,446,744,073,709,551,615


(lebar paling umum untuk komputer pribadi, tetapi belum tentu mereka sistem
operasi , seperti 2015 ),

128 bit: maksimum nilai representable 2 128-1 =


340,282,366,920,938,463,463,374,607,431,768,211,455

16-01

Februari = 65535

32-1

= 4294967295 (lebar paling umum

Sejak operasi aritmatika dapat menghasilkan hasil yang lebih besar dari nilai
representable maksimum, kondisi kesalahan potensial dapat mengakibatkan. Dalam
bahasa pemrograman C , integer ditandatangani meluap menyebabkan perilaku
undefined , sementara unsigned bilangan bulat meluap menyebabkan jumlah
dikurangi modulo kekuatan dua , yang berarti bahwa unsigned integer "membungkus"

overflow. Ini "membungkus" adalah penyebab yang terkenal " Layar Berpisah " di PacMan. [2] A "membungkus" sesuai dengan kenyataan, bahwa misalnya jika penambahan
dua bilangan bulat positif menghasilkan overflow, dapat menyebabkan hasil yang tak
terduga. Misalnya dengan unsigned integer 32 bit, 4000000000u + 1000000000u =
705032704u.
Dalam grafik komputer atau pemrosesan sinyal , itu adalah khas untuk bekerja pada
data yang berkisar dari 0 ke 1 atau dari -1 sampai dengan 1. Contoh dari ini adalah
grayscale gambar di mana 0 mewakili warna hitam, 1 mewakili putih, dan nilai-nilai di
antara mewakili berbagai nuansa abu-abu. Satu operasi yang satu mungkin ingin
mendukung adalah mencerahkan gambar dengan mengalikan setiap pixel dengan
konstan. Jenuh aritmatika memungkinkan satu untuk hanya membabi buta kalikan
setiap pixel dengan yang konstan tanpa khawatir tentang meluap dengan hanya
menempel hasil yang wajar bahwa semua piksel tersebut lebih besar dari 1 (yaitu
"terang daripada putih" ) hanya menjadi putih dan semua nilai "lebih gelap dari hitam"
hanya menjadi hitam.
Dalam beberapa situasi, program mungkin membuat asumsi bahwa variabel selalu
mengandung nilai positif. Jika variabel memiliki integer ditandatangani jenis, overflow
dapat menyebabkan nilai untuk membungkus dan menjadi negatif. melimpah ini
melanggar asumsi program dan dapat menyebabkan perilaku yang tidak diinginkan.
Demikian pula, mengurangkan dari nilai unsigned kecil dapat menyebabkan itu untuk
membungkus ke nilai positif yang besar yang mungkin juga menjadi perilaku tak
terduga. Mengalikan atau menambahkan dua bilangan bulat dapat menghasilkan nilai
yang non-negatif, tapi tiba-tiba kecil. Jika nomor ini digunakan sebagai jumlah byte
untuk mengalokasikan untuk buffer, buffer akan dialokasikan tiba-tiba kecil, yang
mengarah ke buffer overflow yang potensial.
Teknik untuk masalah mitigasi bilangan bulat melimpah
Bahasa pemrograman mengimplementasikan berbagai teknik mitigasi terhadap
overflow disengaja: Ada , Seed7 (dan varian tertentu dari bahasa fungsional), memicu
kondisi pengecualian pada overflow, sementara Python (sejak 2,4) mulus
mengkonversi representasi internal nomor untuk mencocokkan pertumbuhannya,
akhirnya mewakili sebagai long yang kemampuan hanya dibatasi oleh memori yang
tersedia. [6]
Run-waktu pelaksanaan deteksi melimpah AddressSanitizer juga tersedia untuk C
compiler .
Artikel utama: AddressSanitizer
Daftar teknik dan metode yang dapat digunakan untuk mengurangi konsekuensi dari
integer overflow:

Efek dari serangan berbasis integer untuk C / C ++ dan bagaimana untuk


mempertahankan diri mereka dengan menggunakan subtyping di Detection
Efisien dan Akurat dari Serangan berbasis Integer .

CERT As-olah tak terbatas Berkisar (AIR) Model bulat - mekanisme sebagian
besar otomatis untuk menghilangkan bilangan bulat melimpah dan integer
pemotongan As-olah tak terbatas Berkisar Integer Model

Dalam bahasa dengan dukungan asli untuk aritmatika sewenang-wenang-presisi dan


keselamatan jenis (seperti Python atau Common Lisp ), nomor dipromosikan ke ukuran
yang lebih besar secara otomatis ketika overflows terjadi, atau pengecualian
dilemparkan (kondisi sinyal) ketika kendala berbagai ada. Menggunakan bahasa

seperti demikian dapat membantu untuk mengurangi masalah ini. Dalam beberapa
bahasa seperti, situasi Namun masih mungkin di mana integer overflow bisa terjadi.
Contohnya adalah optimasi eksplisit dari kode jalan yang dianggap sebagai hambatan
oleh profiler. Dalam kasus Common Lisp, ini dimungkinkan dengan menggunakan
deklarasi eksplisit untuk mengetik-keterangan variabel untuk kata mesin-size (Fixnum)
[1] dan menurunkan tingkat keselamatan jenis nol [2] untuk blok kode tertentu. [7] [8] [9]
[10]

Di Jawa 8, ada metode kelebihan beban, misalnya seperti Math # addExact () , yang
akan melemparkan ArithmeticException dalam kasus overflow.
Contoh
Pada tanggal 30 April 2015, Federal Aviation Authority mengumumkan akan memesan
Boeing 787 operator untuk mengatur ulang sistem listrik secara berkala, untuk
menghindari integer overflow yang dapat menyebabkan hilangnya daya listrik dan
ram turbin udara penyebaran, dan Boeing akan menyebarkan perangkat lunak
pembaruan pada kuartal keempat. [11] The European Aviation Safety Agency diikuti
pada tanggal 4 Mei 2015. [12] kesalahan terjadi setelah 2 centiseconds
(248,55134814815 hari), menunjukkan 32 bit ditandatangani bilangan bulat .
Tidak mungkin untuk kemajuan masa lalu tingkat 22 dari game arcade Donkey Kong
karena overflow integer dalam waktu / bonus. Donkey Kong mengambil jumlah tingkat
Anda berada di, mengalikan dengan 10 dan menambahkan 40. Ketika Anda mencapai
tingkat 22 yang waktu / jumlah bonus adalah 260 yang terlalu besar untuk nya 8-bit
256 nilai register sehingga me-reset sendiri ke 0 dan memberikan sisanya 4 sebagai
waktu / bonus - tidak cukup lama untuk menyelesaikan tingkat.
Dalam Donkey Kong Jr Matematika , ketika Anda mencoba untuk menghitung angka
lebih dari 10.000, itu hanya menunjukkan 4 digit pertama.