Wat is een integeroverloop?
Integer-overflow verwijst naar het fenomeen dat optreedt in bepaalde computergegevenssoorten waarbij hun tekens van positief naar negatief overschakelen, of vice versa, wanneer ze de uiteinden van hun toepasselijke bereiken bereiken. In computerbereiken hebben gegevenstypes met gehele getallen cirkelvormige bereiken en wanneer ze het ene uiteinde van hun bereik bereiken, gaan ze onmiddellijk naar het andere uiteinde van hun bereik. Dit wordt ook wel integer overflow genoemd.
Een geheel getal met teken kan een bereik van waarden van -2 31 tot (2 31 ) - 1 bevatten. Dit gehele getal kan geen waarde van (-2 31 ) - 1 hebben; het volgende getal waaraan het wordt verhoogd, bevindt zich eerder aan het andere einde van het bereik: (2 31 - 1). De verandering van negatief naar positief aan het einde van het bereik is een voorbeeld van integer overflow. Evenzo kan een geheel getal niet de waarde 2 31 hebben ; deze waarde schakelt in plaats daarvan naar het andere einde van het bereik en wordt -2 31 .
Deze overloop heeft belangrijke gevolgen tijdens het programmeren. Een array kan slechts zoveel indices bevatten als het type geheel getal toestaat, en negatieve indices tellen niet. Als een programmeur probeert een array te maken die groter is dan het type geheel getal toestaat, kunnen er aanzienlijke geheugenfouten optreden omdat integeroverloop zou resulteren in een negatieve index. Dit is vooral gevaarlijk in talen die geen expliciete grenzen hebben voor het controleren op arrays, zoals C ++.
Wanneer een integeroverloop optreedt, kunnen gerelateerde typen overloop zoals bufferoverloop, heapoverloop en stapelbufferoverloop optreden. In al deze gevallen fungeert de integer-overloop om geheugenstructuren te overweldigen met meer gegevens dan die structuren mogelijk kunnen bevatten. Deze overlopen doen in eenvoudige programma's vaak niet veel meer dan een ongeldige lees- of ongeldige schrijffout veroorzaken. Manipulatie van dit probleem door hackers kan echter geheugenfouten veroorzaken die ernstigere problemen kunnen veroorzaken.
In de meeste eenvoudige programma's is integer overflow geen groot probleem. De limieten van het type geheel getal zijn voldoende groot zodat het overloopprobleem niet in het spel komt, tenzij er veel gegevens tegelijk worden verwerkt. In sommige gevallen kan overflow worden beperkt, zoals in het geval van oplopende tellers, door een groter gegevenstype met een groter bereik te gebruiken. Het grotere gegevenstype zou in theorie uiteindelijk hetzelfde overloopprobleem kunnen tegenkomen, maar naarmate datatypebereiken groter worden, worden de kansen kleiner. Het bereik van elk geheel gegevenstype is minimaal twee keer zo groot als de op een na kleinste, dus er is voldoende ruimte voor extra gegevens.