Προγραμματισμός

* Γνώση Υπολογιστών >> Προγραμματισμός >> C /C + + Προγραμματισμός

Τι Μειονεκτήματα Υπάρχουν σε Σιωπηρή αποαναφοράς της Δείκτες

; Δείκτες καθορίσει τον τύπο του αντικειμένου ένα πρόγραμμα λογισμικού αναλαμβάνει είναι σε μια συγκεκριμένη θέση μνήμης . Δείκτες μπορούν να μετατραπούν σε συγκεκριμένες ακέραιοι ή σιωπηρή αναφορές. Οι δείκτες μπορούν να παραπέμπουν σε άλλα δεικτών και πινάκων δεδομένων . Σιωπηρή αποαναφοράς των δεικτών εισάγει τον κίνδυνο των λαθών του λογισμικού και των τρωτών σημείων που δεν εμφανίζονται όταν οι δείκτες που ορίζονται ρητά . Ρητή Versus Σιωπηρή Δείκτες
η μεταβλητή στα δεξιά σιωπηρά αναφέρεται στην εξίσωση στα αριστερά .

Ρητή μετατροπές δείκτη αλλάξετε έναν τύπο δείκτη σε άλλο τύπο δείκτη . Αλλαγή έναν ακέραιο ή byte σε ένα δείκτη είναι επίσης μια ρητή μετατροπή . C + + επιτρέπει την έμμεση μετατροπή από ένα είδος δείκτη να πληκτρολογήσετε * κενό . Null literals μπορούν να έχουν μια σιωπηρή μετατροπή σε οποιοδήποτε τύπο δείκτη . Μεταβλητές στη δεξιά πλευρά της δήλωσης εκχώρησης σιωπηρά αναχθούν με εκείνα που λαμβάνουν για την τιμή των τιμών στην αριστερή πλευρά της δήλωσης εκχώρησης . Όλα dereferencing είναι αυτονόητη σε Java .
Εικόνων αποαναφοράς Operators
Η

Στην C + + , δείκτες προς τα μέλη της κατηγορίας θα πρέπει να αναχθούν στο πλαίσιο ενός αντικειμένου κλάσης . A * χειριστή . Dereferences ένα δείκτη σε ένα μέλος με ένα αντικείμενο κλάσης . Ένα βέλος που ακολουθούνται από αστερίσκο dereferences ένα δείκτη σε ένα μέλος με ένα δείκτη σε ένα αντικείμενο κλάσης . Χρησιμοποιώντας το " * " διαχειριστής indirection στη γλώσσα προγραμματισμού C λέγεται dereferencing ένα δείκτη . Ένας δείκτης ορίζεται χρησιμοποιώντας την έκφραση ptr = μεταβλητή ή τιμή . Μια αποαναφοροποιημένος δείκτης ορίζεται χρησιμοποιώντας την έκφραση * ptr = μεταβλητή ή τιμή .

Η Λάθη
Η

Έμμεση αναφορά σε έναν δείκτη μπορεί να οδηγήσει σε λανθασμένες τιμές , εάν η διεύθυνση που αναφέρεται μετά το τέλος της ζωής του. Όταν ένας δείκτης οριστεί εκ νέου , το πρόγραμμα καλεί την τιμή που αναφέρεται από το δείκτη . Null δείκτες έχουν μια προκαθορισμένη τιμή 0x0 αν στατική και δεν έχει προετοιμαστεί . Σύμφωνα με το " Ένας οδηγός για Kernel εκμετάλλευση " από τον Enrico Perla , "Αν μια πορεία πυρήνα επιχειρεί να dereference ένα δείκτη NULL , απλά θα προσπαθήσουν να χρησιμοποιήσουν τη διεύθυνση 0x0 μνήμης, η οποία θα μπορούσε να οδηγήσει σε μια κατάσταση πανικού , αφού τίποτα δεν αντιστοιχίζεται εκεί . "Ο δείκτης θα πρέπει να ορίζονται σύμφωνα με την εντολή * ptr πριν από την αποαναφοροποιημένος δείκτης μπορεί να χρησιμοποιηθεί κάπου αλλού σε ένα πρόγραμμα C .

Αν η * ptr δεν έχει εκχωρηθεί μια τιμή πριν από την αναφορά , το πρόγραμμα μπορεί να συντριβή . Δείκτες για τα μέλη των δεδομένων μπορεί να οδηγήσει σε κακή dereference . Εάν ο δείκτης δεν κοιτώντας ψηλά τις τιμές από μια σειρά κατηγορία αντικειμένων και δεν μπορεί να προσδιορίσει την τιμή της μεταβλητής , θα παρουσιαστεί σφάλμα . " C + + Gotchas " από τον Stephen C. Dewhurst αναφέρει ότι " ένας δείκτης για μέλος αναφέρεται σε ένα συγκεκριμένο μέλος ενός απροσδιόριστου αντικειμένου . " Το αναφερόμενο αντικείμενο , πρέπει να παρέχονται , καθώς και για το δείκτη για να λειτουργήσει σωστά .
Η
Αδυναμίες
Η

Σιωπηρή αποαναφοράς ενός προετοιμαστεί δείκτη δημιουργεί μια ευπάθεια στον κωδικό του λογισμικού . Καταστροφή της μνήμης διαφθείρει ένα δείκτη που γίνεται αποαναφοροποιημένος . Έμμεση αναφορά σε μια προετοιμαστεί δείκτη αναγκάζει το λογισμικό για την αναφορά σε μια θέση μνήμης που δεν έχει επικυρωθεί . Χωρίς ελέγχους για την προέλευση ή τον προορισμό του αποαναφοροποιημένος δείκτη , οι hackers μπορούν να χρησιμοποιήσουν αυτή την ευπάθεια για να περάσει μια διεύθυνση πυρήνα στον πυρήνα του λογισμικού και να τροποποιήσετε τη μνήμη του με δική τους επιθυμητές τιμές στη θέση των δεδομένων του χρήστη .
Η

Η

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα