Έκδοση του ControlFlag 1.0, ένα εργαλείο για τον εντοπισμό σφαλμάτων στον κώδικα C

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

Το σύστημα εκπαιδεύεται με τη δημιουργία ενός στατιστικού μοντέλου της υπάρχουσας σειράς κώδικα έργων ανοιχτού κώδικα που δημοσιεύονται στο GitHub και σε παρόμοια δημόσια αποθετήρια. Στο στάδιο της εκπαίδευσης, το σύστημα καθορίζει τυπικά μοτίβα για την κατασκευή δομών στον κώδικα και δημιουργεί ένα συντακτικό δέντρο συνδέσεων μεταξύ αυτών των προτύπων, αντανακλώντας τη ροή της εκτέλεσης κώδικα στο πρόγραμμα. Ως αποτέλεσμα, σχηματίζεται ένα δέντρο λήψης αποφάσεων αναφοράς που συνδυάζει την εμπειρία ανάπτυξης όλων των αναλυόμενων πηγαίων κωδίκων. Ο υπό εξέταση κώδικας υποβάλλεται σε παρόμοια διαδικασία αναγνώρισης μοτίβων που ελέγχονται σε ένα δέντρο απόφασης αναφοράς. Μεγάλες αποκλίσεις με γειτονικούς κλάδους υποδηλώνουν την παρουσία μιας ανωμαλίας στο υπό έλεγχο σχέδιο.

Έκδοση του ControlFlag 1.0, ένα εργαλείο για τον εντοπισμό σφαλμάτων στον κώδικα C

Ως παράδειγμα των δυνατοτήτων του ControlFlag, οι προγραμματιστές ανέλυσαν τους πηγαίους κώδικες των έργων OpenSSL και cURL:

  • Ανώμαλες κατασκευές «(s1 == NULL) ∧ (s2 == NULL)» και «(s1 == NULL) | (s2 == NULL)" , τα οποία δεν ταιριάζουν με το μοτίβο που χρησιμοποιείται συνήθως "(s1 == NULL) || (s2 == NULL)". Ο κώδικας εντόπισε επίσης ανωμαλίες στις εκφράσεις "(-2 == rv)" (το μείον ήταν τυπογραφικό λάθος) και "BIO_puts(bp, ":") <= 0)" (στο πλαίσιο ελέγχου της επιτυχούς ολοκλήρωσης του συνάρτηση θα έπρεπε να ήταν "== 0").
  • Στο cURL, ανακαλύφθηκε ένα σφάλμα που δεν ανιχνεύθηκε από στατικούς αναλυτές κατά τη χρήση του στοιχείου δομής «s->keepon», το οποίο είχε έναν αριθμητικό τύπο, αλλά συγκρίθηκε με τη δυαδική τιμή TRUE.

Μεταξύ των χαρακτηριστικών της έκδοσης ControlFlag 1.0, υπάρχει πλήρης υποστήριξη για τυπικά πρότυπα για τη γλώσσα C και η δυνατότητα ανίχνευσης ανωμαλιών σε εκφράσεις υπό όρους "if". Για παράδειγμα, κατά την ανάλυση του τμήματος κώδικα "if (x = 7) y = x;" Το σύστημα θα καθορίσει ότι η δήλωση «αν» χρησιμοποιεί συνήθως την κατασκευή «μεταβλητή == αριθμός» για να συγκρίνει αριθμητικές τιμές, επομένως είναι πολύ πιθανό η «μεταβλητή = αριθμός» στην έκφραση «αν» να προκαλείται από τυπογραφικό λάθος. Το κιτ περιλαμβάνει ένα σενάριο που σας επιτρέπει να κατεβάσετε υπάρχοντα αποθετήρια γλώσσας C στο GitHub και να τα χρησιμοποιήσετε για να δημιουργήσετε το μοντέλο. Διατίθενται επίσης έτοιμα μοντέλα, επιτρέποντάς σας να ξεκινήσετε αμέσως τον έλεγχο του κωδικού.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο