Τα XP υποφέρουν από προβλήματα των NT

Τα νέα Windows XP, τα οποία πριν από μερικές μέρες έκαναν την εμφάνισή τους στην παγκόσμια αγορά, όπως έχουμε γράψει επανειλημμένως, στηρίζονται στον kernel των NT, κάτι που συμβαίνει και με τα 2000.

Αντίθετα με τη μέχρι τώρα πολιτική της Microsoft, κατά την οποία διατηρούσε, χονδρικά, δύο διαφορετικά APIs, το Win16/32 για τις home editions (όπως είναι τα 95, 98, Me κ.λπ.) και το NT API, για πιο σταθερές εκδόσεις των Windows που απευθύνονται σε επιχειρησιακή χρήση, η εταιρεία αποφάσισε να ''σκοτώσει'' οριστικά το πρώτο, κατασκευάζοντας Windows -για οικιακή χρήση- βασισμένα στον NT kernel.

Φυσικά, τα Windows XP διαφέρουν κατά πολύ από τα NT και τα 2000. Αυτό συμβαίνει διότι ο kernel έχει εμπλουτιστεί με διάφορες νέες λειτουργίες, με αποκορύφωμα το εντυπωσιακό GUI. Κατά τα άλλα, όμως, στη βάση κρύβεται ένας NT kernel με όλα τα ''καλά'' που συνεπάγεται αυτό -αυξημένη σταθερότητα, user privileges, NTFS κ.ά.-, αλλά και με μερικά ''κακά'': bugs των NT τα οποία δεν έχουν διορθωθεί.

Ενα τέτοιο πρόβλημα, το οποίο πρωτοεμφανίστηκε στα NT και μπορεί να αναπαραχθεί και στα XP είναι το λεγόμενο ''backspace bug''. Πρόκειται για ένα ασήμαντο bug, το οποίο, δυστυχώς, μπορεί να θέσει εκτός λειτουργίας ολόκληρο το σύστημα.

Η εμφάνιση του προβλήματος σχετίζεται με ένα εσωτερικό bug του csrss.exe, το οποίο είναι η υπεύθυνη υπηρεσία (στο Unix θα το λέγαμε daemon) για την εκτύπωση κειμένου σε ένα τερματικό. Αν το κείμενο προς εκτύπωση περιέχει μια αλληλουχία από τους χαρακτήρες backspace και TAB, το csrss.exe παθαίνει ένα buffer overflow και τερματίζει τη λειτουργία του. Το πραγματικό πρόβλημα επέρχεται από την αντιμετώπιση του NT kernel, ο οποίος θεωρεί την ''πτώση'' του csrss.exe σημαντική απώλεια και, επομένως, ... ''κολλάει'' εμφανίζοντας το γνωστό BSOD - στα XP το ''Blue Screen Of Death'' έχει καταργηθεί, όχι όμως και τα ''κολλήματα''.

Για να μπορέσετε να αναπαράγετε το bug θα πρέπει να δημιουργήσετε ένα αρχείο κειμένου το οποίο περιέχει ζεύγη των χαρακτήρων backspace και TAB. Δυστυχώς, οι περισσότεροι και πιο κοινοί editors χρησιμοποιούν το backspace για την προς τα αριστερά διαγραφή κειμένου. Εντούτοις, το backspace αντιστοιχεί στον ASCII code 8 και μέσω ενός πολύ απλού προγράμματος μπορείτε να κατασκευάσετε το ζητούμενο.

Ο παρακάτω κώδικας σε qbasic μπορεί να πραγματοποιήσει το παραπάνω:

OPEN ''bug.txt'' FOR OUTPUT AS 1
FOR I% = 1 TO 4096
PRINT #1, I%; CHR(9); STRING(16, 8);
NEXT

(ο κώδικας έχει ληφθεί από το backspace bug)

Μετά την εκτέλεση του προγράμματος από το περιβάλλον της qbasic, στο δίσκο σας θα έχει δημιουργηθεί ένα αρχείο με όνομα ''bug.txt''. Αν στη συνέχεια, μέσω ενός DOS shell, τυπώσετε το bug.txt:

C:\> type bug.txt

το σύστημά σας θα κολλήσει ολικά.

Πρέπει να ανησυχώ;

Πρακτικά όχι πολύ, θεωρητικά λίγο παραπάνω. Η αιτιολόγηση γι' αυτήν την ίσως διπλωματική απάντηση συνοψίζεται στα δύο παρακάτω επιχειρήματα:

(α) Κάποιος μπορεί να κατασκευάσει ένα αρχείο .bat ή ένα ολοκληρωμένο πρόγραμμα -όχι περισσότερο από 10-15 γραμμές- και να το στείλει ως attachment με e-mail. Αν ο χρήστης εκτελέσει το αρχείο που θα λάβει, τότε το σύστημά του θα κολλήσει. Ο κίνδυνος είναι υπαρκτός, αλλά αν κρίνουμε την επικινδυνότητα των σύγχρονων worms, τα οποία με αντίστοιχο τρόπο μπορούν να προκαλέσουν N σοβαρότερα προβλήματα, η ανησυχία θα πρέπει να περιοριστεί. (Πρακτικά όχι πολύ)

(β) Το γεγονός ότι ένα bug που εμφανίστηκε στις πρώτες εκδόσεις των NΤ υπάρχει απαράλλαχτο στα XP και μάλιστα με δεδομένο ότι ανάμεσα στα NT και στα XP υπάρχουν και τα 2000, θα πρέπει να εντείνει κάπως την ανησυχία μας για την τακτική της Microsoft στην επίλυση προβλημάτων των λειτουργικών της. Σημειώνουμε ότι το ''backspace bug'' μπορεί κάποιος να το βρει πολύ εύκολα με μια αναζήτησή στο Google. Δεν είναι κάποιο ''κρατικό μυστικό''. Επίσης, θα ήταν παράλογο να υποθέσει κανείς ότι το εν λόγω bug είναι το μόνο πρόβλημα που έχει επιβιώσει από τα NT στα XP.