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

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

Περιγραφή της C + + Λειτουργία & πώς προκαλεί ένα Buffer Overflow

Υπερχείλιση σε C + + που προκαλείται από μερικά διαφορετικά θέματα . Συχνά , εμφανίζεται ως μέρος της λειτουργίας μιας συνάρτησης να γράψετε σε μια σειρά ή να έχουν πρόσβαση σε βαθιά μνήμη . Συνήθως , συμβαίνει υπερχείλιση όταν εισόδους ένας χρήστης ή προγραμματιστής δεδομένα πέρα από το εύρος μιας μεταβλητής ή ενός πίνακα . Λειτουργίες που προσπαθούν να πάνε πέρα από αυτό το εύρος μπορεί επίσης να επιχειρήσει να διαγράψει τα δεδομένα στο σύστημα , ή να ανακατευθύνουν το σύστημα με διαγραφή ή αντικατάσταση πληροφοριών . Λειτουργίες σε C + +
Η

λειτουργίες σε 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 , ο χρήστης θα αρχίσει την εισαγωγή δεδομένων η οποία αντικαθιστά τη μνήμη . Αυτό μπορεί να έχει απρόβλεπτες συνέπειες , όπως η αλλαγή του μια τοπική μεταβλητή , ή, σε ειδικές περιπτώσεις , το ξαναγράψιμο των δεικτών λειτουργίας για την αναφορά διαφορετικά , κακόβουλο κώδικα .
Η
εικόνων

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

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