Was ist ein Integer-Überlauf?

Diese FAQ Antwort wurde von k4thryn:

Ein Integer-Überlauf, oder Integer-Verpackung, ist ein potentielles Problem in einem Programm auf der Grundlage der Tatsache, dass der Wert, kann in einen numerischen Datentyp ist durch die Art der Größe in Bytes. ANSI-C verwendet folgende Mindestgrößen:

Datentyp Größe (Bytes)
char 1
kurz 2
Int 2
lang 4

In der Praxis, viele Compiler eine 4-Byte-int. Es sollte auch darauf hingewiesen, dass die tatsächlichen reicht für die Datentypen hängt davon ab, ob oder nicht sie unterzeichnet werden. zum Beispiel, eine unterzeichnete 2-Byte kurz kann zwischen -32767 und 32767, während ein unsigned short kann zwischen 0 und 65535 liegen. Sehen Sie Ihre [ua] / limits.h-Datei für bestimmte Nummern für Ihren Compiler.

Warum sollten Sie das an? Wenn Sie versuchen, einen Wert in einen Datentyp zu klein ist, um sie sicher zu halten, die High-Bits sind gesunken, und nur die Low-Bits gespeichert sind. Eine andere Art zu sagen, dass ist, dass die Modulo-Arithmetik wird auf den Wert, bevor Sie ihn aufbewahren, um sicherzustellen, dass es passt in den Datentyp. Angesichts unserer unsigned short Beispiel:

Limit: 65535 oder 1111 1111 1111 1111
Zu groß: 65.536 oder 1 0000 0000 0000 0000
Was gibt's gespeichert: 0 oder 0000 0000 0000 0000

Da die oben macht deutlich, dass Ergebnis ist, weil die High-Auftrag (oder links-die meisten) etwas der Wert, der zu groß ist, fallen gelassen. Oder man könnte sagen, dass das, was gespeichert ist das Ergebnis der

  gespeichert = Wert% (max. + 1) 
  oder 
  65.536% (65535 + 1) = 0 

In unterzeichnet Datentypen, ist das Ergebnis ein wenig anders und die Ergebnisse in einigen scheinbar seltsame Verhalten:

Positive begrenzen: 32767 oder 0111 1111 1111 1111
Zu groß: 32768 oder 1000 0000 0000 0000
Was gibt's gespeichert: -32768

Warum ist das? Es ist wegen der "2's Kompliment," die ist, wie negative Zahlen werden im Binär. Um eine lange Geschichte kurz, die erste Hälfte des Bereichs (0 bis 0111 1111 1111 1111) wird für die positiven Zahlen in der Reihenfolge der am wenigsten zur größten. der zweiten Hälfte der Serie ist dann verwendet werden, für negative Zahlen in der Reihenfolge der am wenigsten zur größten. so dass die negativen Bereich für eine unterzeichnete 2-Byte kurz ist -32768 bis -1, in dieser Reihenfolge.

Du bist immer noch fragen, warum diese Fragen, sind Sie nicht? Angenommen, Speicher zugewiesen wird auf der Grundlage eines unsigned integer Datentyp Wert. Wenn dieser Wert ist verpackt herum, kann es sein, dass viel zu wenig Speicher zur Verfügung gestellt werden. Oder wenn ein Vergleich gemacht werden zwischen vorzeichenbehafteten Integer-Wert und eine andere Zahl, vorausgesetzt, dass die ehemaligen sollten niedriger als die letztere, wenn dieser Wert in den negativen überflogen, den Vergleich würde. Aber sind die Dinge zu verhalten, wie die Programmierer gedacht? Wahrscheinlich nicht.

Zusätzliche Quellen von Informationen über Integer-Überläufe

Es ist zwar über den Rahmen dieses Artikels sprengen, gibt es andere Mittel, die mehr ins Detail gehen zu Integer-Überlauf-Fehler, der Verhütung und ihrer Nutzung. Nämlich, gibt es zwei sehr interessante Artikel in Phrack # 60 (eine von Oded Horovitz, und eine von blexim) auf Integer-Überlauf Schwachstellen. Integer Verpackung ist auch in der "Professional-Source-Code Audit" der Präsentation von 2002 USA Black Hat Briefings (Dowd, und ALS).

Ein Werkzeug zum Experimentieren mit Integer-Überläufe

Das Programm int_wrap.c können Sie spielen um mit diesem Problem, indem Sie auf der Befehlszeile, ob der Datentyp (kurz) unterzeichnet werden sollte oder nicht, und die Wert, den Sie verwenden möchten.

Hinweis: Perl hat eine 250-stellige Grenze von Zahlen, und stirbt mit der Fehlermeldung "zu lang" (Version 5.8.0 getestet). Allerdings ist die Zahl der signifikanten Stellen ist viel weniger.

Writing Secure Code Building Secure Software Secure Coding Secure Programming Cookbook
Kauf diese hervorragende Bücher über sicheres Programmieren bei Amazon.com


Top 5 Free Networking Tools

Vulnerability Management für Dummies

Unsere Freunde von Qualys bietet kostenlose Kopien der elektronischen Version der Vulnerability Management für Dummies zu Tech-FAQ Leser.

Vulnerability Management für Dummies:

  • Erklärt, die kritische Notwendigkeit für Schwachstellen-Management
  • Details der grundlegenden Best-Practice-Schritte für eine erfolgreiche Schwachstellen-Management-Programm
  • Gibt einen Überblick über die verschiedenen Schwachstellen-Management-Lösungen - einschließlich der Vor-und Nachteile der einzelnen
  • Highlights der preisgekrönten QualysGuard Schwachstellen-Management-Lösung
  • Bietet eine Zehn-Punkte-Checkliste für die Beseitigung von Schwachstellen aus Ihrer wichtigsten Ressourcen
Bookmark Was ist ein Integer-Überlauf?

Neueste Blog-Posts


Englisch Englisch Deutsch Deutsch Spanisch Spanisch Französisch Französisch Italienisch Italienisch Portugiesisch Portugiesisch Russisch Russisch Niederländisch Niederländisch
Griechisch Griechisch Hindi Hindi Japanisch Japanisch Koreanisch Koreanisch Chinesisch Chinesisch Chinesisch (Taiwan) Chinesisch (Taiwan) Arabisch Arabisch

Copyright 2009 Tech-FAQ. Alle Rechte vorbehalten. Datenschutz.