? Pointers bestimmen den Typ des Objekts ein Software-Programm übernimmt in einem bestimmten Speicherort . Zeiger können auf bestimmte Zahlen oder implizite Bezüge umgewandelt werden. Zeiger können auf andere Zeiger und Arrays . Implizite Dereferenzierung von Zeigern führt das Risiko von Software-Fehlern und Schwachstellen, die nicht auftreten , wenn Zeiger explizit definiert sind. Explizite Versus Implizite Pointers
Die Variable auf der rechten Seite wird implizit der Gleichung auf der linken Seite verwiesen .
Explizite Konvertierungen Zeiger ändern einen Zeiger in einen anderen Typ Zeiger . Ändern eines Integer oder Byte zu einem Zeiger ist auch eine explizite Konvertierung . C + + ermöglicht die implizite Konvertierung von einem Zeiger Typ void * eingeben. Null Literale kann eine implizite Konvertierung in jedem Zeiger -Typ. Variablen auf der rechten Seite einer Zuweisung implizit dereferenziert wie sie auf den Wert der Werte auf der linken Seite der Zuweisung . Alle Dereferenzierung ist implizit in Java.
Dereferenzierungsoperatoren
In C + +, Zeiger auf die Teilnehmer müssen im Kontext einer Klasse Objekt dereferenziert werden . A . * Operator dereferenziert einen Zeiger auf ein Element mit einer Klasse -Objekt. Ein Pfeil mit einem Sternchen dereferences einen Zeiger auf ein Element mit einem Zeiger auf ein Objekt der Klasse folgt. Mit dem "*" Indirektionsoperator in der Programmiersprache C heißt Dereferenzierung eines Zeigers . Ein Zeiger definiert ist mit dem Ausdruck ptr = Variable oder Wert . Einen Zeiger definiert ist mit dem Ausdruck * ptr = Variable oder Wert .
Fehler
Dereferenzierung eines Zeigers in ungültigen Werten führen kann, wenn die Adresse verwiesen wird nach dem Ende ihrer Lebensdauer . Wenn ein Zeiger dereferenziert wird, ruft das Programm den Wert den der Zeiger verweist . NULL-Zeiger über eine Standard- 0x0 -Wert, wenn statische und initialisiert. Laut " A Guide to Kernel Exploitation " von Enrico Perla : "Wenn ein Kernel- Pfad versucht dereference einen NULL-Zeiger , wird es einfach versuchen, die Adresse im Speicher 0x0, die wahrscheinlich in Panik Zustand führen wird , da dort nichts abgebildet wird verwenden . " der Zeiger muss definiert mit dem Befehl * ptr , bevor die Zeiger erstellen anderswo in einem C-Programm verwendet werden können .
Wenn die * ptr ist kein Wert vor , auf die verwiesen zugeordnet , kann das Programm abstürzen. Zeiger auf Daten Mitglieder können in einer schlechten dereference führen. Wenn der Zeiger nicht auf der Suche nach Werten aus einem Array von Class-Objekte und können nicht bestimmen den Wert der Variablen , wird ein Fehler auftreten . "C + + Fallstricke " von Stephen C. Dewhurst besagt, dass " ein Zeiger auf Element auf ein bestimmtes Mitglied einer unbestimmten Objekt bezieht . " Das referenzierte Objekt muss auch für den Zeiger um korrekt zu arbeiten geliefert werden.
Schwachstellen
Implizite Dereferenzierung eines initialisierten Zeiger schafft eine Schwachstelle in Software-Code . Speicher Korruption verdirbt einen Zeiger, der dereferenziert wird . Dereferenzierung eine nicht initialisierte Zeiger bewirkt, dass die Software, um eine Speicherstelle , die nicht validiert verweisen. Ohne Kontrolle der Quelle oder Ziel der Zeiger erstellen , können Hacker diese Sicherheitslücke ausnutzen, um eine Kernel-Adressraum zur Software Kernel übergeben und ändern ihre Speicher mit eigenen gewünschten Werte anstelle von Daten des Benutzers .