λειτουργίες σε C και C + + συμπεριφέρονται όπως αναμένεται , σε σύγκριση με άλλες γλώσσες προγραμματισμού . Υπάρχουν λειτουργίες , όπως και κάθε άλλη μεταβλητή ή συστήματος πληροφοριών , στη μνήμη και αναφέρονται από τη διεύθυνση . Λειτουργίες , από μόνες τους, είναι ακριβώς μπλοκ κώδικα στη μνήμη οποία γίνεται αναφορά . Οποιοδήποτε λάθος ρίχνονται από αναφορά συνάρτηση μπορεί να οφείλεται σε μια αδήλωτη λειτουργία , ή μια λειτουργία που ονομάζεται λανθασμένα . Ένα σφάλμα buffer overflow πιο πιθανό θα έρθει από τον κώδικα μέσα στη συνάρτηση .
Εικόνων Μεταβλητές και μνήμη
Η
C + + είναι στατικά δακτυλογραφημένη, πράγμα που σημαίνει ότι ο προγραμματιστής πρέπει να καθορίσετε μια μεταβλητή τύπου κατά την οποία μια μεταβλητή . Αυτό συμβαίνει επειδή C + + ακυρώνει μπλοκ μνήμης ορισμένων μεγεθών με βάση το είδος της μεταβλητής . Μια μεταβλητή ακέραιο (int ) δηλώνεται σε ένα πρόγραμμα , θα πάρετε ένα χώρο στη μνήμη που προορίζεται ειδικά για έναν int . Το μπλοκ μνήμης θα είναι το ακριβές μέγεθος του ακεραίου .
Η Πίνακες
Η
πίνακες είναι συλλογές των μεταβλητών που περιέχονται σε ένα όνομα . Για παράδειγμα, ο παρακάτω συστοιχία δημιουργεί μια λίστα 10 ακέραιοι, η οποία μπορεί να προσεγγιστεί με αναφορά ένα ευρετήριο ( όνομα [ 0 ] , το όνομα [ 1 ], κλπ. )
int όνομα [ 10 ] ?
Αντί για έναν ακέραιο αριθμό , ο πίνακας ακυρώνει αρκετά συνεχή χώρο για 10 . Ωστόσο , επειδή η πρόσβαση ευρετήριο πίνακα μπορεί να επιχειρηθεί σε τιμές πέραν των όσων περιέχονται στον πίνακα ( όνομα [ 11 ] , για παράδειγμα) , τα λάθη μπορεί να συμβεί αν ο προγραμματιστής δεν παρακολουθεί το πώς χρησιμοποιεί τη συστοιχία .
Η
Buffer Overflow
Η
Λόγω της φύσης των συστοιχιών σε C + + , μια σειρά μέσα σε μια συνάρτηση μπορεί να πέσει θύμα buffer υπερχειλίσεις . Εάν ένας χρήστης εισάγει μια εισαγωγή χαρακτήρων μεγαλύτερο από ό, τι η συστοιχία μπορεί να χειριστεί , οι επιπλέον χαρακτήρες θα αντικαταστήσετε τα δεδομένα που γειτνιάζουν με τη σειρά στη μνήμη . Για παράδειγμα , πώληση
άκυρη παράδειγμα ( ) {
login int [ 15 ] ?
Int i = 0 ?
Ενώ ( cin >> a [i ] ) {
i + + ?
} }
Ο βρόχος "while" δεν θα τελειώσει ποτέ , και από τη στιγμή που " i" φθάνει το 15 , ο χρήστης θα αρχίσει την εισαγωγή δεδομένων η οποία αντικαθιστά τη μνήμη . Αυτό μπορεί να έχει απρόβλεπτες συνέπειες , όπως η αλλαγή του μια τοπική μεταβλητή , ή, σε ειδικές περιπτώσεις , το ξαναγράψιμο των δεικτών λειτουργίας για την αναφορά διαφορετικά , κακόβουλο κώδικα .
Η
εικόνων
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα