Λειτουργία εντοπισμού σφαλμάτων του πυρήνα των Windows 7. Η αρχή του εντοπισμού εντοπισμού σφαλμάτων του λειτουργικού συστήματος. Σύμβολα για τον πυρήνα σφαλμάτων

Ο όρος "σφαλμάτωση πυρήνα" σημαίνει τη μελέτη της εσωτερικής δομής των δεδομένων πυρήνα και (ή) βήμα προς βήμα των λειτουργιών του πυρήνα. Αυτό το εντοπισμό σφαλμάτων είναι ένας πολύ χρήσιμος τρόπος για να μελετήσετε την εσωτερική συσκευή των Windows, καθώς σας επιτρέπει να εμφανίσετε την εμφάνιση των πληροφοριών εσωτερικού συστήματος που δεν είναι προσβάσιμα όταν χρησιμοποιείτε οποιοδήποτε άλλο μέσο και δίνει μια σαφή ιδέα για την πρόοδο του κώδικα στον πυρήνα.

Πριν εξετάσουμε διάφορες μεθόδους σφαλμάτων του πυρήνα, ας εξερευνήσουμε ένα σύνολο αρχείων που θα χρειαστούν για την εφαρμογή κάθε είδους εντοπισμού σφαλμάτων.

Σύμβολα για τον πυρήνα σφαλμάτων

Τα αρχεία συμβόλων περιέχουν χαρακτηριστικά και μεταβλητά ονόματα, καθώς και ένα διάγραμμα και τη μορφή δομών δεδομένων. Δημιουργούνται από το πρόγραμμα Linker (Linker) και χρησιμοποιούνται από το Febugger για συνδέσμους με αυτά τα ονόματα και να τα εμφανιστούν κατά τη διάρκεια της συνεδρίασης εντοπισμού σφαλμάτων. Αυτές οι πληροφορίες συνήθως δεν αποθηκεύονται σε δυαδικό κώδικα, καθώς δεν είναι απαραίτητο κατά την εκτέλεση του κώδικα. Αυτό σημαίνει ότι χωρίς αυτό, ο δυαδικός κώδικας γίνεται μικρότερος σε μέγεθος και εκτελείται ταχύτερα. Αλλά σημαίνει επίσης ότι κατά την εντοπισμό σφαλμάτων, πρέπει να παρέχετε πρόσβαση σε λειτουργία εντοπισμού σφαλμάτων σε αρχεία που σχετίζονται με τις δυαδικές εικόνες στις οποίες οι σύνδεσμοι οδηγούνται κατά τη διάρκεια της συνεδρίασης εντοπισμού σφαλμάτων.

Για να χρησιμοποιήσετε οποιοδήποτε εργαλείο εντοπισμού σφαλμάτων στη λειτουργία του πυρήνα, προκειμένου να μελετήσετε την εσωτερική συσκευή της δομής δεδομένων του πυρήνα των Windows (κατάλογος διαδικασιών, μπλοκ ροής, μια λίστα φορτισμένων προγραμμάτων οδήγησης, πληροφορίες σχετικά με τη χρήση της μνήμης κ.λπ.) χρειάζεστε τα αρχεία των σωστών χαρακτήρων Και, τουλάχιστον, το αρχείο χαρακτήρων για τη δυαδική εικόνα του πυρήνα - ntoskrnl.exe. Τα αρχεία πίνακα χαρακτήρων πρέπει να αντιστοιχούν στην έκδοση της δυαδικής εικόνας από την οποία εξήχθησαν. Για παράδειγμα, εάν το πακέτο Windows Service Pack είναι εγκατεστημένο ή κάποια λύση που ενημερώνει τον πυρήνα, πρέπει να λάβετε ενημερωμένα αρχεία των χαρακτήρων.

Το φορτίο και η εγκατάσταση χαρακτήρων για διαφορετικές εκδόσεις των Windows δεν είναι δύσκολο, αλλά δεν είναι πάντοτε δυνατό να ενημερώσετε τις διορθώσεις για τις διορθώσεις. Ο ευκολότερος τρόπος για να αποκτήσετε την επιθυμητή έκδοση των χαρακτήρων σφαλμάτων επικοινωνώντας με τον διακομιστή συμβόλων της Microsoft που σχεδιάστηκε ειδικά για αυτό, χρησιμοποιώντας ειδική σύνταξη για αυτό στη διαδρομή στα σύμβολα που καθορίζονται στο πρόγραμμα εντοπισμού σφαλμάτων. Για παράδειγμα, η επόμενη πορεία προς τα σύμβολα κάνει σφαλμάτωση για λήψη χαρακτήρων από το σύμβολο του διακομιστή Internet και αποθηκεύστε το τοπικό αντίγραφο στο φάκελο C: \\ Σύμβολα: SRV * C: \\ Σύμβολα * http: //msdl.microsoft.com/download/ σύμβολα

Λεπτομερείς οδηγίες για τη χρήση ενός συμβολικού διακομιστή μπορούν να βρεθούν στο αρχείο βοήθειας εντοπισμού σφαλμάτων ή στο διαδίκτυο στην ιστοσελίδα http://msdn.microsoft.com/en-us/windows/hardware/gg462988.aspx.

  • Συγγραφείς:

    Barinov S.S., Shevchenko O.G.

  • Ετος:
  • Μια πηγή:

    Πληροφορική και Τεχνολογία Υπολογιστών / Υλικά της Διεθνούς Επιστημονικής και Τεχνικής Διεθνούς Επιστημονικής και Τεχνικής Διάσκεψης των Φοιτητών, Μεταπτυχιακών φοιτητών και νέων επιστημόνων - 23-25 \u200b\u200bΝοεμβρίου, Ντόνετσκ, Donntu. - 2010. - 448 σ.

σχόλιο

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

Κύριο μέρος

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

Το λογισμικό εφαρμογής Το Toolkit προσφέρει ένα ευρύ φάσμα χαρακτηριστικών. Κάθε ολοκληρωμένο περιβάλλον ανάπτυξης περιλαμβάνει τη δυνατότητα εντοπισμού σφαλμάτων χωρίς την ανάγκη χρήσης κοινής ωφέλειας τρίτων. Αν μιλάμε για συστηματικό λογισμικό και αναπτύσσοντας ειδικότερα τους οδηγούς, τότε, λόγω της ιδιαιτερότητάς της, η διαδικασία ανάπτυξης είναι εξαιρετικά δύσκολη και έχει ελάχιστη αυτοματοποιημένη. Όλες οι φάσεις ανάπτυξης, συμπεριλαμβανομένου του εντοπισμού σφαλμάτων, είναι ξεχωριστές. Για να εκτελέσετε καθένα από αυτά, απαιτούνται ειδικές προϋποθέσεις: η γραφή του κώδικα προγράμματος εκτελείται σε ένα πλήρες σύστημα υπολογιστή, εντοπισμό σφαλμάτων - στο σύστημα εντοπισμού σφαλμάτων, δοκιμές - ανάλογα με τις περιστάσεις κ.λπ. Το ίδιο πρόγραμμα εντοπισμού εντοπισμού του πυρήνα είναι πιο περίπλοκο στην ανάπτυξη και, κατά συνέπεια, λιγότερο φιλικό.

Σε γενικές γραμμές, μπορούμε να μιλήσουμε για την έλλειψη εντοπισμού εντοπισμού πυρήνα. Αν και αυτά τα μέσα είναι διαθέσιμα, συχνά δεν είναι απαραίτητο να μιλήσουμε για εναλλακτικές λύσεις. Για παράδειγμα, το Debugger Debugger Debugger των Microsoft Windows έχει ένα πολύ υψηλό όριο εισόδου. Πολλοί προγραμματιστές μιλούν για την πρώτη αρνητική εμπειρία όταν τον συναντήσουν και οι περισσότερες από τις δυνατότητές της παραμένουν καυτερή.

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

    Οι σύγχρονες εντολογίες παρέχουν τις ακόλουθες βασικές λειτουργίες:
  • σφάλμα στο επίπεδο πηγαίου κώδικα ·
  • Διαχείριση εκτέλεσης ·
  • Προβολή και αλλαγή μνήμης.
  • Προβολή και αλλαγή του περιεχομένου των μητρώων επεξεργαστών.
  • Προβολή στοίβας κλήσεων.

Για να διευκολυνθεί η εργασία με τον κωδικό αποσυναρμολόγησης, τα λεγόμενα χρησιμοποιούνται. Χαρακτήρες σφαλμάτων. Κατά τη διάρκεια της εργασίας του συνδέσμου, εκτός από την εικόνα του εκτελέσιμου αρχείου, μπορεί επίσης να δημιουργηθεί ένα αρχείο δεδομένων που περιέχει πληροφορίες που δεν απαιτούνται κατά την εκτέλεση του προγράμματος, αλλά είναι εξαιρετικά χρήσιμο κατά την εντοπισμό σφαλμάτων: τα ονόματα των λειτουργιών, παγκόσμια μεταβλητές, περιγραφή των δομών. Οι χαρακτήρες σφαλμάτων είναι διαθέσιμοι για όλα τα εκτελέσιμα αρχεία λειτουργικού συστήματος των Windows.

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

Κατά τη διακοπή του κωδικού λειτουργίας πυρήνα, εμφανίζεται το ακόλουθο δίλημμα. Το Debugger για να αλληλεπιδράσει με τον προγραμματιστή χρησιμοποιεί τη διεπαφή χρήστη. Εκείνοι. Ελάχιστο, το ορατό μέρος του εντοπισμού σφαλμάτων εκτελείται στη λειτουργία Χρήστη και φυσικά χρησιμοποιεί τη διεπαφή προγραμματισμού εφαρμογής (API Windows), η οποία με τη σειρά του στηρίζεται στις μονάδες λειτουργίας πυρήνα. Έτσι, η αναστολή του κώδικα "Core Mode μπορεί να οδηγήσει σε αμοιβαίο μπλοκάρισμα: το σύστημα θα σταματήσει να ανταποκρίνεται στα αιτήματα χρήστη.

Για να αποκτήσετε πρόσβαση στη μνήμη του πυρήνα, τα εξαρτήματα του εντοπισμού σφαλμάτων πρέπει επίσης να πραγματοποιηθούν στη λειτουργία πυρήνα. Αυτό οδηγεί στην εμφάνιση δύο προβλημάτων ταυτόχρονα, τα οποία αποτελούν προφανή συνέπεια της οργάνωσης της μνήμης στον προστατευμένο τρόπο επεξεργαστή.

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

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

Διαφορετικά, η κατάσταση είναι όταν η αποστολή διακόπτεται ή η εκτέλεση σπειρωμάτων συστήματος. Η διακοπή μπορεί να συμβεί ανά πάσα στιγμή, επομένως είναι αδύνατο να προβλεφθεί ποιο πλαίσιο θα χρησιμοποιηθεί το ρεύμα. Τα συστηματικά ρεύματα δεν ανήκουν σε καμία διαδικασία και δεν μπορούν να μεταδώσουν την εικονική διεύθυνση του λειτουργικού χρήστη. Από εδώ προκύπτει ότι σε αυτές τις καταστάσεις είναι αδύνατο να αναφερθούμε στη μνήμη του καθεστώτος χρήστη.

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

Η περιγραφόμενη συμπεριφορά παραβιάζεται εάν ο κωδικός προγράμματος του εντοπισμού σφαλμάτων αναγκάζεται να χρησιμοποιεί υψηλό επίπεδο ερώτησης διακοπής (επιπέδων αίτησης διακοπής, IRQL). Με το IRQL, το οποίο συμπίπτει με ή υπερβαίνει τον διαχειριστή μνήμης IRQL, η κυρία δεν θα είναι σε θέση να φορτώσει τη σελίδα που λείπει, επειδή Το λειτουργικό σύστημα θα εμποδίσει το σφάλμα της σελίδας διακοπής. Αυτό θα οδηγήσει στην κατάρρευση του λειτουργικού συστήματος.

Η εντοπισμός σφαλμάτων γίνεται αποδεκτή για διαδραστική και έκτακτη ανάγκη. Με διαδραστικό τοπικό εντοπισμό σφαλμάτων, το πρόγραμμα εντοπισμού σφαλμάτων εκτελείται στο ίδιο σύστημα με το αντικείμενο εντοπισμού σφαλμάτων. Με το διαδραστικό απομακρυσμένο αποσφάλιση, το πρόγραμμα εντοπισμού σφαλμάτων εκτελείται σε διάφορα συστήματα. Κατά την αποσύνδεση του κώδικα πυρήνα, το σύστημα πρέπει να παρακολουθείται, ξεκινώντας από τα πρώτα βήματα της λήψης, όταν το δίκτυο δεν λειτουργεί ακόμα, επομένως, απλές σειριακές διεπαφές, όπως COM, Firewire, USB, χρησιμοποιούνται για την επικοινωνία συστημάτων. Πρόσφατα, λόγω των τάσεων στην ανάπτυξη της εικονικοποίησης του λογισμικού σε διαφορετικά επίπεδα αφαίρεσης, οι εικονικές μηχανές προσέλκυσαν όλο και περισσότερο. Το OS Beullide λειτουργεί ως σφάλμα, το OS που είναι τοποθετημένο περιλαμβάνει τη διεπαφή χρήστη του εντοπισμού σφαλμάτων.

Έτσι, για εντοπισμό εντοπισμού έκτακτης ανάγκης, δεν χρειάζεται να εγκαταστήσετε ένα εργαλείο σφαλμάτων στον υπολογιστή δοκιμής. Η κατανομή του λειτουργικού συστήματος των Windows περιλαμβάνει μηχανισμούς για την εφαρμογή εντοπισμού εντοπισμού έκτακτης ανάγκης. Πριν από την επανεκκίνηση, το λειτουργικό σύστημα μπορεί να εξοικονομήσει πληροφορίες σχετικά με την κατάσταση του ότι ο προγραμματιστής μπορεί να αναλύσει και να ανακαλύψει την αιτία. Αυτές οι πληροφορίες που αποθηκεύονται σε ένα αρχείο ονομάζονται χωματερή μνήμη.

Τα μέσα εντοπισμού σφαλμάτων βασικών πυρήνων παρέχονται από τον κατασκευαστή του λειτουργικού συστήματος των Windows στο πλαίσιο των δωρεάν εργαλείων εντοπισμού σφαλμάτων για το πακέτο των Windows. Τα εργαλεία περιλαμβάνουν τις συσκευές γραφικών και κονσόλας της WindBG και KD, αντίστοιχα (στο εξής εντοπισμό εντοπισμού σφαλμάτων των Windows). Το έργο αυτών των εντοπισμών βασίζεται στους μηχανισμούς που προβλέπονται από τους προγραμματιστές του λειτουργικού συστήματος και τοποθετούνται στον πυρήνα του.

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

Το Debugger Windows επικεντρώνεται στο απομακρυσμένο διαδραστικό και εντοπισμό έκτακτης ανάγκης, όταν αποκαλύπτονται όλες οι δυνατότητές του. Ταυτόχρονα, δεν υποστηρίζεται η πλήρης τοπική διαδραστική εντοπισμός εντοπισμού: Το πρόγραμμα εντοπισμού σφαλμάτων σας επιτρέπει να δείτε μερικές δομές πυρήνα.

Υπάρχει μια ενότητα επέκτασης για το Debugger των Windows που ονομάζεται LiveKD, που δημιουργήθηκε από τον Mark Russinianovich, το οποίο με κάποια έννοια εφαρμόζει τοπικό διαδραστικό εντυπωσιακό σφάλμα. Το LiveKD εν κινήσει δημιουργεί μια χωματερή μνήμη του συστήματος εργασίας και το χρησιμοποιεί για σφάλματα.

Τα εργαλεία "εργαλεία εντοπισμού σφαλμάτων για τα Windows" ενημερώνονται τακτικά και υποστηρίζουν όλα τα σύγχρονα λειτουργικά συστήματα των Windows.

Το Debugger του Slatice Kernel, που παράγεται από το Compuware στο πακέτο λογισμικού Driverstudio, παραδίδει παραδοσιακά μια εναλλακτική λύση στο πακέτο "Εργαλεία εντοπισμού σφαλμάτων για Windows". Ένα χαρακτηριστικό γνώρισμα του Slackice ήταν η εφαρμογή τοπικού διαδραστικού εντοπισμού σφαλμάτων στο υποστηριζόμενο υλικό. Το Debugger θα μπορούσε να ελέγξει σχεδόν πλήρως τη λειτουργία του λειτουργικού συστήματος.

Από τις 3 Απριλίου 2006, η πώληση των οικογενειακών προϊόντων Driverstudio διακόπτεται λόγω των "πολλών τεχνικών και επιχειρηματικών προβλημάτων, καθώς και της γενικής κατάστασης της αγοράς". Η τελευταία έκδοση του λειτουργικού συστήματος, η υποστήριξη της οποίας εφαρμόστηκε είναι το Windows XP Service Pack 2. Κατά κανόνα, οι ενημερώσεις υπηρεσιών δεν αλλάζουν τη διεπαφή εφαρμογής του λειτουργικού συστήματος, αλλά ο αριθμός των αριθμών κλήσης συστήματος και άλλες μη εγγενείς πληροφορίες μπορεί να υποβληθεί σε α αλλαγή. Το πρόγραμμα εντοπισμού σφαλμάτων βασίστηκε σε άκαμπτα καθορισμένες διευθύνσεις εσωτερικών δομών δεδομένων. Κατά συνέπεια - με τη συντήρηση του πακέτου σέρβις, δόθηκε η συμβατότητα. Προφανώς, οι πιο αργές εκδόσεις του λειτουργικού συστήματος των Windows δεν υποστηρίζονται.

Το Syser Kernel Debugger δημιουργήθηκε από μια μικρή κινεζική εταιρεία Sysersoft ως αντικατάσταση του εντοπισμού σφαλμάτων. Η πρώτη τελική έκδοση κυκλοφόρησε το 2007. Όπως το Softice, το Syster Kernel Debugger είναι σε θέση να εκτελέσει διαδραστική εντοπισμό σφαλμάτων στο λειτουργικό σύστημα. Οι υποστηριζόμενες είναι μόνο 32 bit εκδόσεις σύγχρονων εκδόσεων των Windows.

Προς το παρόν, το Windows Debugger είναι το κύριο εργαλείο μεταξύ των προγραμματιστών των μονάδων πυρήνα. Χρησιμοποιεί επίσης την ομάδα ανάπτυξης του λειτουργικού συστήματος των Windows.

cPP OELPFPT Πρόγραμμα HLBBEUS RP TBVPFFU στο PFMBDLPK SDTB στο BTBTYKY DBNRBNY RBNSFY. Lbn rtbchymp, chbn okhtsop vkdef obbdbfs pdop yuy khuftspufch rpdlbüli, webcme retauyuyuyui / etc / fstab. Upttpu pvtbfcf rbnsfy στο hufpkufchb, oe scamsayus huftspufby rapdlbüli, ottinet, mephisp, h καθαρότερο npnofof oe rapdabychbafus.

Σημείωση: Yurpmshkfa lpnbodh jumbon (8) DMS Chlbobyus sdtx street, zej okhtsop upbosfsh bchbtchchch. Rpume fitty rp lpnbode swapon (8) Tbdemb rpdlbyl dpmtsob vssfshbbbbrtrtbnnb dumpon. Pvshuup lfp chrchrpostopus кабддбуененен рееесенопк dumpdev h zbkme rc.conf (5) . Emuy bdbdbob lfb resestoobs, fp rpume ohps rty retchpk nopzprmshpchbfemshulpk retebzthely vkhdaf bchpngfyyuely obbrheeb rtpztbnb saveCore (8) . BCNR BCHBTKOKOK DBNR SDTB H LBFBMS, BDBDIRT HT RETENOPC DUMBDIR ZBKMB RC.CONF. Rp khnpmyuba lbfbmpn dms bchbtky dbnrph scmsefus / var / crash.

mivp chist npseff cbdbfs huftpkufchp dms ottpub pvtbbb rbnsfy schopa utail rbtbnext dump h uftple config lpzhtbgypopzp zbbkmb chbesp sdtb. FBLPK URRUPV YURPMSHPHBFSH OE Telp Depneodhefus σε DPMTSEO YURPMSHPCHBFSHUS, FPMSLP EMUY CHIST IPFIFE RPMKHYUBFSH BTBTYKHOTS PVTBTP RBNSFY SDTB, LPFTPP BTBTYKOP BCHETEFFAF TBVFFH RTE OBBZTH.

Σημείωση: Dbme fetallo gdb pedobyubef pfumbdyuil gdb, obrechooosobhe hl` `thesin pfambdles sdtb" ". RFPF TECIN DPUFYZBEFUS OBRKULPN GDB στο RBTBNEFPN -K. H TEACINE PFMBDLY SDTB Σχολές Σχολές ΓκϋΤ YENA Σχετικά (KGDB).

Υπόδειξη: Emum chist yurpmsshefe freebsd chetuy 3 ymi nmea tboaa, chheeyueye pfldpyopsp sdtb lpbodpk λωρίδα, b oe hufbobchbfsh vsshpe pfldpyope sdtp:

# Cp kernel kernel.debug # strip -g πυρήνα

lFPF IBZ OE FBL HTS OPEPVIPDINE, OP TVPNEIDH. (PE FreeBSD 4 J VPMEE RPDOYI TEMYBI FPF YBZ CHSCHRPMOSEFUS BCHFPNBFYYUEULY H LPOGE RTPGEUUB RPUFTPEOYS SDTB make.) LPZDB RAS HUEYUEOP, BCHFPNBFYYUEULY YMY rty RPNPEY LPNBOD CHSCHYE, BL NPTSEFE HUFBOPCHYFSH EZP PVSCHYUOSCHN PVTBPN, OBVTBCH make install.

babnefshet, yufp h ufbitschi cheetuyi freebsd (DP 3.1, OE chlmayubs lfpf temm), yurpmshhefus sdtb h zhpstnbfe a.out, ripfpnh yi fbvmygsk uinchpmpchus rpufsopspc h rbnsfy. Στο vpmshiktkin fbvmygegk uinchpmpc h oe hueyuyoopn pfampuopop sdte lfb ymyyoss ftbfb. RPumedayee Θέματα του FreeBSD Yurpmshhaf SDTB H ZHPTNBFE ELF, ZEA LFP OE SCMSEFUS RTPVEMPK.

eUMY BL FEUFYTHEFE OPCHPE RAS, ULBTSEN, OBVYTBS YNS OPCHPZP SDTB RTYZMBYEOYY BZTHYUYLB W, OP CHBN OHTSOP BZTHTSBFSH J TBVPFBFSH έχουν DTHZYN SDTPN, YUFPVSCH UOPCHB CHETOHFSHUS Α OPTNBMSHOPNH ZHHOLGYPOYTPCHBOYA, BZTHTSBKFE EZP FPMSHLP Β PDOPRPMSHPCHBFEMSHULPN TETSYNE rty RPNPEY ZHMBZB -s, HLBSCHCHBENPZP rty BZTHLE, Β Obbfen khshchpmife fBye sbzy:

# Fsck -p # mount -a -t ufs # ώστε το σύστημα αρχείων σας για / var / crash είναι εγγράψιμο # savecore -n /kernel.panicked / var / crash # έξοδος # ... σε πολλαπλών χρήστη

bfb rpmedpchbfemshoffs hlbchbff rttpztbnn saveCore (8) Σχετικά με το yurpmshptbe dtzpzp sdtb dms yuchmeyuyuyuyuyus yehno. Yobyuyk vekdef yurpmshpchbfs sdtp, tbvpfbaee h tb npneoph, ulptee chuzp, oyuzp oe ultmbef, rpfph ufp btbtkoksk rbnsfy y uinchpmsk sdtb vhdhf pfmyubfsus.

b Firth, rpume utipub btbtykopp dbnrb, retekdife h lbfbmbs / sys / witeer y bromhufyfe lpnbodh gdb -k. Ya rtpztbnch gdb ufp spf ufp:

Σύμβολο-αρχείο kernel.debug exec-file /var/crash/kernel.0 core-file /var/crash/vmcore.0 th chbms - chist npsef pfmbcychbfs btbtkom dbnr, yurpmshks yuipdocke felufshs sdtb fpuop fbbefe, llb chiste mavpk dtzpk rtpztbnnpk.

chPF TSKTOBM LPNBO OBEBUB TBVPFSH GDB, YMMAUFTHAKEK BFH RTPGEDCHT. Dmyo-vosthply vshmy tbptchbs dms hmkhyuyus yufbvemshopufy dmsu dms hdpvufchb sflply retpokhnet κόλλες. Chuu pufbmshop scmsefus ftbuytpchlpk poyvly, tebshop chpyulokhchyk chp tbets tbvpfshd dtbchtpn lpopmy pcvt.

1: Script ξεκίνησε στις Παρέχνες 30 23:15:22 1994 2: # CD / SYS / CONCISE / URIA 3: # GDB -K KERNEL /VAR/CRASH/VMCORE.1 4: Δεδομένα σύμβολο ανάγνωσης από / USR / SRC / SYS / CONCITE / URIAH / KERNEL ... Έγινε. 5: Idleptd 1F3000 6: PANIC: Επειδή είπατε! 7: Τρέχουσα PCB AT 1E3F70 8: Ανάγνωση σε σύμβολα ../../i386/i386/machDep.c...done. 9: (kgdb) όπου 10: # 0 εκκίνηση (arghowto \u003d 256) (../../I386/I386/MachDep.c γραμμής 767) 11: # 1 0xF0115159 σε πανικό () 12: # 2 0xF01955BD στο Diededie ( ) (../../I386/I386/MachDEP.C Γραμμή 698) 13: # 3 0xF010185E σε DB_FNCALL () 14: # 4 0xF0101586 σε DB_COMMAND (-266509132, -266509516, -267381073) 15: # 5 0xf0101711 db_command_loop () 16: # 6 0xf01040a0 σε db_trap () 17: # 7 0xF0192976 σε kdb_trap (12, 0, -272 630 436, -266 743 723) 18: # 8 0xf019d2eb σε trap_fatal (...) 19: # 9 0xF019ce60 σε Trap_PFAULT ( ...) 20: # 10 0xF019CB2F στην παγίδα (...) 21: # 11 0xf01932A1 σε εξαίρεση: calltrap () 22: # 12 0xf0191503 σε cnopen (...) 23: # 13 0xf0132c34 σε spec_open () 24: # 14 0xf012d014 σε vn_open () 25: # 15 0xf012a183 σε open () 26: # 16 0xf019d4eb σε syscall (...) 27: (KGDB) Μέχρι 10 28: ανάγνωση σε σύμβολα ../../i386/i386 / etrap.c...Done. 29: # 10 0xF019CB2F σε παγίδα (πλαίσιο \u003d (TF_ES \u003d -260440048, TF_DS \u003d 16, TF_ \\ 30: EDI \u003d 3072, TF_ESI \u003d -266445372, TF_EBP \u003d -272630356, TF_ISP \u003d -27 \\ 31: 2630396, TF_EBX \u003d - 266427884, TF_EDX \u003d 12, TF_ECX \u003d -266 427 884, TF \\ 32: _EAX \u003d 64772224, TF_TRAPNO \u003d 12, TF_ERR \u003d -272 695 296, TF_EIP \u003d -26 \\ 33: 6672343, TF_CS \u003d -266 469 368, TF_EFLAGS \u003d 66066, TF_ESP \u003d 3072, TF_ \\ 34: SS \u003d -266427884)) (../../I386/I386/Trap.C Γραμμή 283) 35: 283 (Void) Trap_pfault (& FALSE); 36: (kgdb) πλαίσιο πλαίσιο-\u003e tf_ebp πλαίσιο-\u003e tf_eip 37: ανάγνωση σε σύμβολα για ../../i386/isa/pcvt/pcvt_drv.cd.done. 38: # 0 0xf01ae729 σε pcopen (dev \u003d 3072, σημαία \u003d 3, mode \u003d 8192, p \u003d (δομή p \\ 39: roc *) 0xf07c0c00) (../../i386/isa/pcvt/pcvt_drv.cc γραμμή 403) 40: 403 Επιστροφή ((* linkw.l_open) (dev, tp))? 41: (KGDB) Κατάλογος 42: 398 43: 399 ΤΡ-\u003e T_STATE | \u003d TS_CARR_ON? 44: 400 TP-\u003e T_CFLAG | \u003d CLOCAL; / * Δεν μπορεί να είναι MODEM (:-) * / 45: 401 46: 402 #if PCVT_NETBSD || (Pcvt_freebsd\u003e \u003d 200) 47: 403 επιστροφή ((* linesw.l_open) (dev, tp)). 48: 404 #else 49: 405 ΕΠΙΣΤΡΟΦΗΣ ((* LinesW.l_Open) (dev, ΤΡ, Σημαία))? 50: 406 #Endif / * PCVT_NETBSD || (PCVT_FreeBSD\u003e \u003d 200) * / 51: 407) 52: (KGDB) Εκτύπωση TP 53: Ανάγνωσης στην Σύμβολα για ../../i386/i386/cons.c...done. 54: $ 1 \u003d (δόμηση TTY *) 0x1BAE 55: (KGDB) Εκτύπωση TP-\u003e T_LINE 56: $ 2 \u003d 1767990816 57: (KGDB) UP 58: # 1 0xF0191503 σε CNOPEN (DEV \u003d 0x00000000, Σημαία \u003d 3, Λειτουργία \u003d 8192, P \u003d (ST \\ 59: RUCT PROC *) 0xF07C0C00) (../../i386/i386/cons.c γραμμή 126) 60: Επιστροφή ((* cdevsw.d_open) (dev, σημαία, λειτουργία, ρ))? 61: (KGDB) Μέχρι 62: # 2 0xF0132C34 σε Spec_open () 63: (KGDB) Μέχρι 64: # 3 0xF012D014 σε vn_open () 65: (KGDB) Μέχρι 66: # 4 0xF012a183 σε ανοικτή () 67: (KGDB) UP 68: # 5 0xF019D4EB στο Syscall (πλαίσιο \u003d (TF_ES \u003d 39, TF_DS \u003d 39, TF_EDI \u003d \\ 69: 2158592, TF_ESI \u003d 0, TF_EBP \u003d -272638436, TF_ISP \u003d -272629788, TF \\ 70: _EBX \u003d 7086, TF_EDX \u003d 1, TF_ECX \u003d 0, TF_EAX \u003d 5, TF_TRAPNO \u003d 582, \\ 71: TF_ERR \u003d 582, TF_EIP \u003d 75749, TF_CS \u003d 31, TF_EFLAGS \u003d 582, TF_ESP \\ 72: \u003d -272638456, TF_SS \u003d 39)) ( ./../I386/I386/Trap.C Γραμμή 673) 73: 673 Σφάλμα \u003d (* callp-\u003e sy_call) (p, args, rval); 74: (KGDB) UP 75: Επιλεγμένο αρχικό πλαίσιο. Δεν μπορείτε να ανεβείτε. 76: (KGDB) QUIT 77: # Έξοδος 78: Έξοδος 79: 80: Script Done On Fri Δεκ 30 23:18:04 1994

lpndefbty l chtchtobmh:

SFTPLB 6:

lFP DBNR, CHSFSHK RTY RPNPEY DDB (OSET OSET), RPPPNH LPNNEFBTYK L BCHBTYKOKOPH PUFBOPCH YNEF YNEOOP Chede `` Επειδή είπατε! "" "" "Ftbuytpchlb ufelb zmhvplb; Pdoblp yebubyubmshopk rtyuyupk reteypdb h ddb linchem btbtkobs pufbopchlb rty spyohophe poyvly uftbugshchy rbnsfy.

SWFLB 20:

lfp trep () h ftbuypchle ufelb.

SWFLB 36:

rtyohdifemshope yurpmshptoma orthrch zabugshchy ufelb; Ferretsh LFP OE OKHTSOP. Rterppzubafus, yufp ztbugshchs ufelb chlbzhchbaf σχετικά με το rtbchimshope tbbrpmpseye, dbcu h umkhyubi btbtykopp pufbochb. ZMSDS σχετικά με το uftplh yuipdopp pdb 403, npsop ulbbfsh, yufp ceushnb chetpsfop, yufp mivp cheopchbf dpufhr rp hlbbfema `tp", myvp vshshpd kba zubugshb nbuychb.

SWFLB 52:

rpipce, yufp cheopchbf hlbbfemsh, op στο scmsefus dprhufinshn bdeupup.

SFTPLB 56:

pdoblp, puehuydop, yufp στο chlbchchchchchubf σχετικά με το NHEPTA, FBL YUFP NSH BROFLY OBY MINULS! (DMS Fairy, LFP OE TBLPN στο LFPK Yubufsha LPDB: TP-\u003e T_Line UMKHTSYF DMSO LPOPMSHPZP HUFTSPUFCHB, TH IFP DPMCOP VSSFS DPUFBFUPU NBMOOCHLUP GEMPA YUYUMP.)

Πώς να ξεκινήσετε το Debugger του πυρήνα;

ΑΠΑΝΤΗΣΗ ΜΑΣ:

Στη διαδικασία ανάπτυξης λογισμικού, υπάρχει ένα πολύ σημαντικό στοιχείο - αυτό είναι το σφάλμα. Σε σχέση με τα προγράμματα εφαρμογής, πραγματοποιείται με τη βοήθεια που λειτουργούν σε λειτουργία χρήστη και συχνά ενσωματώνονται στο IDE. Προκειμένου να μπορέσει να αποκλίνει, για παράδειγμα, ο οδηγός, πρέπει να ξεκινήσει ο εντοπισμός σφαλμάτων του πυρήνα.

Πρέπει να εκτελέσετε τον επεξεργαστή εντολών CMD. Ανοίξτε το μενού Έναρξη στη γραμμή εργασιών. Στο παράθυρο που εμφανίζεται, κάντε κλικ στο "Run ...". Εμφανίζεται το παράθυρο "Αρχικό πρόγραμμα". Στο πλαίσιο κειμένου, πληκτρολογήστε CMD και κάντε κλικ στο κουμπί "OK".

Τώρα δημιουργήστε ένα αντίγραφο ασφαλείας του αρχείου boot.ini. Πρώτα μάθετε τη διαδρομή εγκατάστασης του τρέχοντος αντιγράφου των Windows χρησιμοποιώντας την εντολή: Echo% Systemroot%

Στη συνέχεια, μεταβείτε στο δίσκο, με το εγκατεστημένο λειτουργικό σύστημα εισάγοντας τους αναχωρήσεις συσκευών και μετά από αυτούς, βάζοντας το κόλον. Χρησιμοποιώντας την εντολή CD, μεταβείτε στον κατάλογο ρίζας. Τώρα χρησιμοποιήστε την εντολή Atright, αφαιρέστε τα "κρυφά" χαρακτηριστικά, "μόνο για ανάγνωση" και "σύστημα" από το αρχείο boot.ini. Η εντολή αντιγραφής δημιουργεί ένα αντίγραφο ασφαλείας και, στη συνέχεια, ορίστε τα χαρακτηριστικά στη θέση.

Για να καταργήσετε την τρέχουσα λίστα επιλογών λήψης, χρησιμοποιήστε την εντολή BootCFG / Query. Προβάλετε τη λίστα και ορίστε αυτό το στοιχείο με βάση ποιες νέες ρυθμίσεις θα δημιουργηθούν με τη δυνατότητα εντοπισμού σφαλμάτων στη λειτουργία πυρήνα. Πρέπει να θυμόμαστε το αναγνωριστικό εγγραφής εκκίνησης.

Χρησιμοποιήστε την εντολή BootCFG / Copy για να δημιουργήσετε μια εγγραφή εκκίνησης. Για να καθορίσετε το αναγνωριστικό εγγραφής που θα αντιγράψετε, χρησιμοποιήστε την παράμετρο / ID. Χρησιμοποιώντας την παράμετρο / D, ρυθμίστε το όνομα εγγραφής που θα εμφανιστεί. Τώρα πρέπει να επιστρέψετε στη λίστα επιλογών λήψης χρησιμοποιώντας την εντολή bootcfg / Query και δείτε το προστιθέμενο αναγνωριστικό εισόδου.

Τώρα πρέπει να ενεργοποιήσετε τις επιλογές για να ξεκινήσετε το πρόγραμμα εντοπισμού σφαλμάτων του πυρήνα στο προηγουμένως δημιουργημένο εγγραφή εκκίνησης. Εάν εντοπίσετε σφάλματα στη μηχανή-στόχο, πρέπει απλώς να προσθέσετε την επιλογή / debug.

Εάν θέλετε να εφαρμόσετε ένα απομακρυσμένο σφάλμα με τη σύνδεση του υπολογιστή-στόχου μέσω της θύρας COM στο μηχάνημα κεντρικού υπολογιστή και, στη συνέχεια, χρησιμοποιήστε τις επιλογές θύρας και / θύρας και / baud για να καθορίσετε τον αριθμό θύρας και την ισοτιμία συναλλάγματος.

Εάν αποκλείετε εξ αποστάσεως μέσω του καλωδίου Firewire (Interface IEEE 1394), στη συνέχεια, προκειμένου να ενεργοποιήσετε την κατάλληλη λειτουργία, χρησιμοποιήστε την επιλογή / DBG1394 και να καθορίσετε την επιλογή αριθμού καναλιών / CH.

Για να βεβαιωθείτε ότι γίνονται οι αλλαγές, ελέγξτε την εκκίνηση χρησιμοποιώντας την εντολή BootCFG με την παράμετρο / ερώτημα. Βάζοντας την εντολή εξόδου, κλείστε το παράθυρο Επεξεργαστή εντολών.

Εάν είναι απαραίτητο, αλλάξτε τις ρυθμίσεις εκκίνησης του λειτουργικού συστήματος. Ανοίξτε τον πίνακα ελέγχου μέσω του μενού Έναρξη και ανοίξτε το στοιχείο "Σύστημα" ήδη σε αυτό. Στο παράθυρο "Ιδιότητες συστήματος" που ανοίγει, επιλέξτε την καρτέλα Για προχωρημένους. Σε αυτήν την καρτέλα, επιλέξτε μια ενότητα με το όνομα "Λήψη και ανάκτηση" και κάντε κλικ στο κουμπί "Παράμετροι". Στο παράθυρο "Φόρτωση και ανάκτηση" που εμφανίζεται, πρέπει να ενεργοποιήσετε την επιλογή "Λίστα οθόνης των λειτουργικών συστημάτων". Κλείστε το κιβώτιο διαλόγου με το κουμπί "OK".

Εκτελέστε έναν υπολογιστή για επανεκκίνηση. Επιλέξτε Φόρτωση με το Debugger. Συνδεθείτε στο σύστημα και αρχίστε να εργάζεστε στο μηχάνημα προορισμού ή ξεκινήστε την απομακρυσμένη αποσφαλμάτωση. Επωφεληθείτε από τα μέσα ως Windbg και KD.

Οι αξιοπρεπείς υπολογιστές πυρηνικών επιπέδων και τα παράθυρα είναι λίγο και στο Linux μπορούν να μετρηθούν στα δάχτυλα της ένα χέρι, και εκείνων των περισσότερων ωμών, ημιτελή ή εγκαταλελειμμένα και βρύα κατάφυτα ... Σήμερα θα μιλήσουμε για τα πιο δημοφιλή και τα πιο ενδιαφέροντα τους -
Linice..

Εισαγωγή

Πώς μπορείτε να μαντέψετε με τίτλο, Linice. - Πρόκειται για ένα ανεπίσημο "λιμάνι" του θρυλικού
Μαλακά κάτω από το Linux, Αποθηκεύστε το σύστημα διασύνδεσης, το σύστημα εντολών και τα περισσότερα από τα τελευταία χαρακτηριστικά: το καυτό κλειδί φλόγας (σε Linice. αυτό είναι ) Εγκατάσταση σημείων διακοπής υλικού για όλες τις λειτουργίες και κλήσεις συστήματος. Προβολή GDT / LDT / IDT, σελίδες φυσικής μνήμης. Χαρακτηριστικά δανεισμένα από το GDB (κλήση αυθαίρετη κλήση λειτουργίας, εξοικονόμηση / αποκατάσταση του πλαισίου των μητρώων, εσωτερικών μεταβλητών κλπ.).

Σε αντίθεση με τους περισσότερους άλλους υπολογιστές που εργάζονται μέσω της άμυνας, ο μηχανισμός φτερών, ο μηχανισμός φτερών (ανάλογος των Windows των οποίων είναι debug_process που χρησιμοποιείται από το εφαρμοσμένο debugger), Linice. Χρησιμοποιεί ένα ιθαγενές ίχνος, το ίδιο με το μαλακό, το οποίο επιτρέπει στους δύο εντολοδόρους να εντοπίζουν εντοπισμό των προστατευόμενων προγραμμάτων που άλλοι δεν αντιμετωπίζουν.

Στην πραγματικότητα, αυτό δεν είναι λιμάνι (επομένως και εισαγωγικά), αλλά ένα ανεξάρτητο έργο γραμμένο από το μηδέν και την επέκταση των κειμένων πηγής χωρίς χρέωση (από το Softice υπάρχει μόνο έμπνευση). Το κύριο μέρος του κώδικα, που προορίζεται για τον πυρήνα 2.4, γράφτηκε από έναν γερμανό κορίτσι Goran Goran, αλλά εντελώς διαφορετικοί άνθρωποι έχουν ήδη ασχοληθεί με υποστήριξη για τον πυρήνα 2.6: Daniel Reznick, Peter K. και Carlos Manuel Duclos Vergara. Και οι συμπατριώτες μας - Oleg Khudakov - ξαναγραφούν αρχεία συναρμολόγησης με NASM "και επάνω
GCC.

Τα κείμενα πηγής βρίσκονται στην επίσημη ιστοσελίδα του έργου -
Linice% 0α..com "\u003e www.linice.com, υπάρχει μια τεκμηρίωση, σύντομες ερωτήσεις και σύνδεσμο προς το φόρουμ
Linice% 0α."\u003e groups.google.com/group/linice. Δεν υπάρχουν έτοιμοι δυαδικές συνελεύσεις.
Οι δημιουργοί του έργου άνοιξαν τον δικό τους λογαριασμό στο SourceForge, αλλά έχουν τεθεί για να καθορίσουν οποιεσδήποτε αρχεία σε αυτό, παρουσιάζοντας μόνο 3 στιγμιότυπα οθόνης στην αναθεώρηση "και πολύ χαμηλή ποιότητα:
.

Απαιτήσεις συστήματος

Τελευταία έκδοση Linice. Φοράει τον αριθμό 2.6 και χρονολογείται από τις 28 Ιουνίου 2005, υποστηρίζοντας πλήρως τον πυρήνα 2.4.x πυρήνα και τη λειτουργία VGA Console. Σημαντικά προβλήματα παρατηρούνται με τους νεότερους πυρήνες και ο πυρήνας 2.6.x υποστηρίζεται μόνο σε περιορισμένη λειτουργία.
Το πρόγραμμα εντοπισμού σφαλμάτων αναπτύχθηκε και δοκιμάστηκε στο Debian 2.6. Η συμβατότητά του με τους υπόλοιπους διανομείς δεν εγγυάται ότι μας αναγκάζει να καταφύγουμε στο ταμπούρ, αλλά σε ορισμένες περιπτώσεις δεν βοηθάει και το ταμπούρ. Στην πραγματικότητα κρατήστε τη μηχανή του Debian μόνο για να συνεργαστείτε Linice.- είναι φυσιολογικό. Πριν από πολύ καιρό, όταν δεν έχει ακόμη υπάρξει η εφαρμογή του μαλακού για NT, πολλοί χάκερ εγκατεστημένοι κερδίζουν 9x μόνο για να σπάσουν το πρόγραμμα, αν και οι ίδιοι κάθισαν κάτω
Nt. Επειδή καλύπτει όλες τις λεπτές αποχρώσεις της εγκατάστασης Linice. Εντός ενός άρθρου, είναι πρακτικά δεν είναι ρεαλιστικό, θα περιορίσω την περιγραφή της διαδικασίας σύνταξης και εκτόξευσης. Linice. Σε ένα συγκεκριμένο κιτ διανομής - Knoppix 3.7 με πυρήνα 2.4.1 στη λειτουργία VGA της κονσόλας.
Linice. Υποστηρίζει μηχανές ACPIS και πολλαπλών επεξεργαστών, αλλά είναι άσχημα φιλικό με το x "mi, ειδικά σε κάρτες βίντεο εκτός από το NVIDIA. Έγχρωμο βάθος 24 bit. Δεν αντιλαμβάνεται," debesting "μόνο 8, 16 και 32 bits, έτσι το debugging του x Οι εφαρμογές είναι πιο βολικές για να οδηγήσετε μέσω ενός απομακρυσμένου τερματικού που συνδέονται μέσω της θύρας COM στο πρωτόκολλο VT100. Σε αυτή την περίπτωση, το τοπικό πληκτρολόγιο θα συνεργαστεί επίσης με
Linice.!

Σύνταξη και διαμόρφωση Linice

Κατεβάστε το αρχείο GZIP των κειμένων πηγής www. Linice..devic.us / Linice.-2.6.tar.gz, που καταλαμβάνει λίγο λιγότερο από megabytes, αποσυμπίεσε το δίσκο, μεταβείτε στον κατάλογο. / Έγγραφα και από το αρχείο README, μάθετε ότι το συγκρότημα εντοπισμού σφαλμάτων στο πλαίσιο του πυρήνα 2.4 πραγματοποιείται έτσι:

# CD Build
# ./Make_Bin-2.4.
# CD ../bin
# Κάνει καθαρό? Mak.ΜΙ.

Ωστόσο, πριν ξεκινήσετε, πρέπει να ανοίξετε το αρχείο. / Bin-2.4 / makefile και να επεξεργαστείτε τη συμβολοσειρά στόχου σύμφωνα με τη διαμόρφωση και την αρχιτεκτονική της πλατφόρμας στόχου. Συγκεκριμένα, σε μηχανές ACPI με επεξεργαστές πολλαπλών πυρήνα ή υπερφόρτωσης, θα μοιάζει με αυτό:

TARGET \u003d -DSMP -DIO_APIC

Μετά την ολοκλήρωση της συλλογής στον κατάλογο. / Bin Θα υπάρχουν πολλά αρχεία και καταλόγους, αλλά σημαντικά από αυτά είναι:

Το Linsym είναι η μονάδα εκκίνησης του εντοπισμού σφαλμάτων.
Linince.dat - αρχείο διαμόρφωσης;
Xice - Υποστήριξη x "OV, όταν εργάζεστε σε λειτουργία κειμένου, μπορείτε να το διαγράψετε.
./LINICE_2.4.27/LINICE.O - η φορτωμένη μονάδα πυρήνα που περιέχει το ίδιο το ίδρυμα του εντοπισμού σφαλμάτων.

Διαδικασία συναρμολόγησης Linice.

Συλλογή του κιτ ελάχιστης εργασίας, θα ήταν ωραίο να πάρετε τα πάντα - τα παραδείγματα demo debug που βρίσκονται στον κατάλογο. / Δοκιμάστε και συντάχθηκαν από το σενάριο Compute, καθώς και τη μονάδα επέκτασης (κατά τη γνώμη μας, plugin) που βρίσκεται στον κατάλογο . / Ext που συλλέγεται από την εντολή λήψης και λήψης από την εντολή insmod. Κανένα όφελος από αυτό, αλλά, έχοντας μελετήσει το κείμενο πηγής, θα μπορέσουμε να γράψουμε τις δικές τους ενότητες που επεκτείνουν τη λειτουργικότητα
Linice..

Όταν εκκίνηση knoppix "και στην κατώτατη γραμμή της οθόνης, εμφανίζεται η πρόσκληση" boot: "όπου πρέπει να εισάγετε" knoppix 2 vga \u003d normal ". Cheat code" knoppix "επιλέγει τον πυρήνα 2.4 (αυτόματα φορτωμένο από προεπιλογή, έτσι knoppix Μπορεί να μειωθεί), το "2" μπλοκάρει τη φόρτωση X "OV και" VGA \u003d Normal "ρυθμίζει τη πρότυπη λειτουργία VGA με ανάλυση 80x25.

Αφού περιμένετε τη λήψη, πείτε "SU", στη συνέχεια "passwd" και εισάγετε έναν νέο κωδικό πρόσβασης για τη ρίζα "Α, κάτω από την οποία αμέσως μεταβείτε στο σύστημα, χρησιμοποιώντας την εντολή σύνδεσης. Εάν αυτό δεν γίνει, η προσπάθεια εκκίνησης, η προσπάθεια εκκίνησης Linice. Τελειώνει με μια αποτυχία σύνθλιψης με την κραυγή "σφάλμα κατάτμησης".

Κατά τη λήψη του knoppix "και από έναν σκληρό δίσκο (στην οποία μπορείτε να εγκαταστήσετε την εντολή" sudo knoppix-installer ", που σημειώθηκε στο παράθυρο τερματικού από κάτω από τη συνεδρία LiveCD), θα εμφανιστεί ένα μενού Έναρξη με μια λίστα διαθέσιμων πυρήνων. Επιλέξτε Linux (2.4) -1 και κάντε κλικ Για να καθορίσετε τις παραμέτρους λήψης - "2 VGA \u003d Normal". Η λέξη "knoppix" δεν χρειάζεται να γράψει, επειδή ο πυρήνας έχει ήδη επιλεγεί. Αφού ολοκληρωθεί η λήψη, δίνουμε την εντολή σύνδεσης και εισάγετε το ριζικό σύστημα "OHM (θεωρείται ότι ο λογαριασμός έχει δημιουργηθεί προηγουμένως).

Η έναρξη του εντοπισμού σφαλμάτων πραγματοποιείται από την εντολή. / Linsym -i, μετά την οποία εμφανίζεται αμέσως στην οθόνη. Εάν αυτό δεν συμβεί, προσπαθήστε να καθορίσετε το πλήκτρο "-verbose 3" για να εμφανίσετε τα διαγνωστικά μηνύματα.
Ένας από τους λόγους για τη μη λήψη αποτυχίας μπορεί να είναι η έλλειψη αρχείου /Boot.map.map που περιέχει τη διεύθυνση των πυρηνικών λειτουργιών. Η λήψη αποτυγχάνει και εάν τα περιεχόμενα του συστήματος.Map δεν ταιριάζουν με τον σημερινό πυρήνα, το οποίο μπορεί να εμφανιστεί, για παράδειγμα, κατά τη διάρκεια της ανασυγκρότησης. Ορισμένοι μεταγλωττιστές των διανομών ή δεν περιλαμβάνουν το System.MAP. όπου χρειάζεται. Σε τέτοιες περιπτώσεις, είναι αρκετό απλώς να ανασυγκροτούμε τον πυρήνα, καθορίζοντας τη διαδρομή του εντοπισμού σφαλμάτων στο αρχείο. Έτσι, η ασφάλεια δεν υποφέρει, και Linice. Μπορεί να δουλέψει!
Επιστροφή από το πρόγραμμα εντοπισμού σφαλμάτων στο σύστημα συμβαίνει ή με τη βοήθεια του "x " Συνδυασμός Προκαλεί ένα πρόγραμμα εντοπισμού σφαλμάτων από οποιοδήποτε πρόγραμμα. Ωστόσο, δεν είναι καθόλου το γεγονός ότι βρισκόμαστε στο πλαίσιο του, επειδή το Linux είναι ένα σύστημα πολλαπλών εργασιών, μετατρέποντας τις διαδικασίες ένα προς μία και τις εντολές ADDR (contexts μεταγωγής) στο λεξικό Linice. Ακόμα δεν υπάρχει, και όταν εμφανίζεται - άγνωστο. Ως εκ τούτου, είναι απαραίτητο να αρρωστήσετε, τον καθορισμό των διακοπτών για τις κλήσεις συστήματος που χρησιμοποιεί ένα συγκεκριμένο πρόγραμμα ή να σπάσει στη διαδικασία από τη μέθοδο INT 03H, την οποία θα μιλήσουμε τώρα.

Για την εκφόρτωση του εντοπισμού σφαλμάτων (εάν θέλει πραγματικά να εκφορτώσει) απαντά στο κλειδί "-x", που μεταδίδεται από το ίδιο linsym "y.

Βασικά στοιχεία της εργασίας S. Linice.

Για όσους έχουν ήδη συνεργαστεί με μαλακά, mastering Linice. Δεν θα υπάρξει πρόβλημα. Όλες οι ίδιες εντολές χρησιμοποιούνται εδώ: D - Dump μνήμης, Επεξεργασία ηλεκτρονικού μνήμης, T - Step-By-Step Trace, P - Turracing χωρίς να εισάγετε τη λειτουργία, R - Προβολή / τροποποίηση μητρώων, BPM / BPX - Ρύθμιση του σημείου διακοπής / Εκτέλεση μνήμης και κλπ. Μια πλήρης λίστα εντολών περιέχεται στην ενσωματωμένη βοήθεια που ονομάζεται βοήθεια (παρεμπιπτόντως, το "όνομα βοήθειας_Name" δίνει πρόσθετες πληροφορίες για την ομάδα) και στην τεκμηρίωση του προσωπικού.

Ας κάνουμε κλικ Και εισέρχονται στη λίστα των διαδικασιών που εμφανίζονται στην οθόνη η εντολή proc και η τρέχουσα διαδικασία επισημαίνεται με μπλε χρώμα:

: Proc.

1 0000 C1C3E000 Sleeping 0 0 init
2 0000 F7EE8000 Sleeping 0 0 Keventd
3 0000 F7EE2000 Sleeping 0 0 ksoftirqd_cpu0
4 0000 F7EE0000 Sleeping 0 0 ksoftirqd_cpu1
5 0000 F7ed0000 Sleeping 0 0 Kswapd
6 0000 F7eaA000 Sleeping 0 0 Bdflush
7 0000 F7EA8000 Sleeping 0 0 kupdated
56 0000 F6A36000 Sleeping 0 0 Kjournald
1006 0000 F7A34000 Τρέξιμο 0 0 Automount
1013 0000 F68E6000 Sleeping 0 0 Cupsd
...
1105 0000 F6DDE000 Sleeping 0 0 Mc
1106 0000 F6DD4000 Sleeping 0 0 CONS.Saver

Οι διαδικασίες είναι, φυσικά, καλό, αλλά πώς συνεχίζουμε τα προγράμματα εντοπισμού σφαλμάτων; Το απλούστερο πράγμα είναι να συνδεθείτε στο σημείο εισόδου της μηχανής CCH, που αντιστοιχεί στις οδηγίες Int 03H, προ-γράφοντας τα περιεχόμενα του αρχικού byte. Αυτό μπορεί να γίνει από οποιονδήποτε εξάγωνο επεξεργαστή, για παράδειγμα, το οποίο αναφέρθηκε επανειλημμένα από εμένα.
Hte.

Με τη λήψη του αρχείου στον επεξεργαστή, κάντε κλικ στην επιλογή (MODE), επιλέξτε ELF / Εικόνα, προσαρμόστε το δρομέα στο σημείο εισόδου :, DAVIM (Επεξεργασία) και αλλάξτε το πρώτο byte στο CCH, εξοικονομούμε αλλαγές στο (Αποθηκεύστε) και βγείτε έξω. Κατά την έναρξη ενός προοδευτικού προγράμματος Linice. Αμέσως εμφανίζεται, διαταράσσεται από την εξαίρεση που δημιουργείται από CCH, μετά την οποία η EIP υποδεικνύει το τέλος
Cch.

Κατάσταση του προγράμματος με παρατεταμένο σημείο εισόδου κατά τη στιγμή του εντοπισμού σφαλμάτων

0023: 080482C0 CC Int 3
0023: 080482C1 ED στο EAX, DX
0023: 080482C2 5E POP ESI
0023: 080482C3 89E1 MOV ECX, ESP

Ο δρομέας υποδεικνύει οδηγίες στο EAX, DX (EDH), το οποίο είναι ένα κομμάτι από την εντολή Patched Xor EBP, EBP (31h EDH). Τώρα (θεωρητικά), πρέπει να αποκαταστήσουμε την αρχική byte αλλάζοντας το CCH σε 31 ώρες, μειώστε το μητρώο EIP ανά μονάδα και να συνεχίσετε την ανίχνευση σε κανονική λειτουργία.

Αλλά δεν ήταν εδώ! Linice. - Αυτό είναι, φυσικά, το λιμάνι, αλλά μόνο πολύ ωμά, και δεν ξέρει πώς να τροποποιήσει τη μνήμη της εικόνας της σελίδας, ακόμη και αν ανοίξετε πρώτα το τμήμα κώδικα για εγγραφή. Ούτε e (επεξεργασία) ούτε f (πλήρωση), ούτε m (αντιγραφή μνήμης) δεν λειτουργούν! Αλλά λειτουργεί στη στοίβα, και εμείς, οι χάκερ, αυτό είναι αρκετό.

Θυμάμαι την τρέχουσα αξία του μητρώου EIP. Αντιγράψτε το Patched Machine στην κορυφή της στοίβας. Επαναφέρεια το byte cch εκεί. Μεγάζουμε τον έλεγχο σε αυτό αλλάζοντας την αξία του EIP. Την εκτελούμε με την εκτέλεση ενός ενιαίου ενεργού πράξης. Και επιστρέψτε το EIP στο μέρος, δηλαδή στο επόμενο μηχάνημα:

Αποκατάσταση του αρχικού byte που αντικαταστάθηκε από την εντολή Int 03h

; Κοιτάζουμε στην κορυφή της στοίβας (από την καθαρή περιέργεια).
: D ESP-10
0018: BFFFEFC0 C0 82 04 08 00 00 00 00 5D 0C 00 40 DC EF FF BF

; Αντιγράψτε την αποδεδειγμένη εντολή του μηχανήματος στην κορυφή της στοίβας.
; Ο αριθμός 10h είναι το μέγιστο δυνατό μέγεθος της εντολής του μηχανήματος στο X86.
: M EIP-1 \u200b\u200bL 10 ESP-10

; Κοιτάζουμε πώς αλλάζει η στοίβα.
: D ESP-10
0018: BFFFEFC0 CC ED 5E 89 E1 83 E4 F0 50 54 52 68 F0 85 04 08

; Ναι! Η στοίβα άλλαξε πραγματικά, ήρθε η ώρα να διορθώσετε το CCH σε 31 ώρες.
: E ESP-10 31
Επεξεργασία άμεσων δεδομένων που δεν εφαρμόζονται ακόμα.

; Ωχ! Η άμεση εκχώρηση δεδομένων σε Linice δεν εφαρμόζεται,
; Αλλά μπορούμε να επεξεργαστούμε τη χωματερή στη διαδραστική λειτουργία (επίσης
; όπως στο μαλακό) ή δώστε την εντολή f ESP-10 L 1 31, λαμβάνοντας υπόψη μόνο υπόψη
; Τι, σε αντίθεση με το Softice, ο εντοπισμός σφαλμάτων Linice δεν ενημερώνει το παράθυρο Dump,
; Ως εκ τούτου, μετά την εκτέλεση της εντολής f μπορεί να φαίνεται ότι
; κανένα αποτέλεσμα; Στην πραγματικότητα, δεν αξίζει να ενημερώσετε
; Ομάδα Dump D ESP-10, και όλα θα πέσουν στη θέση τους.

; Μεταδίδουμε τον έλεγχο στην εντολή που αντιγράφεται στη στοίβα,
; Θυμωναμαστε την αξία του μητρώου EIP.
: R EIP (ESP-10)
REG: EIP \u003d BFFFEFC0

; Κάντε μια ενιαία πράξη ίχνος.
: Τ.
0023: BFFFEFC2 5E POP ESI

; Όπως βλέπουμε, το μητρώο EIP αυξήθηκε κατά 2 (BFFFEFC2H - BFFFEFC0H) \u003d 02H,
; Κατά συνέπεια, η διεύθυνση της ακόλουθης εντολής είναι: 080482C1H - 01H + 02H \u003d 080482C2H,
; Όπου 080482C1H είναι η αρχική τιμή του EIP κατά την είσοδο στο πρόγραμμα, ένα 01Η - το μέγεθος της INT 03H.

; Εγκαταστήστε το EIP στην εντολή μετά τη προοδευτική διδασκαλία.
: R eip 80482c2
REG: EIP \u003d 80482C2

Αυτοί είναι χοροί με το ταμπούρ πρέπει να κανονίσουν. Και τι να κάνετε; Έτσι, με τη φόρτωση προγραμμάτων στο Debugger, καταλήξαμε, τώρα είμαστε σφιχτά από το σημείο διακοπής για κλήσεις συστήματος και πυρηνικές λειτουργίες.

Η εντολή EXP εμφανίζει τα ονόματα που εξάγονται από τον πυρήνα, οποιαδήποτε από τις οποίες μπορεί να εμφανιστεί σε εκφράσεις, για παράδειγμα, το "BPX DO_BKR" ισοδυναμεί με το "BPX C012C9E8".

Την απόσυρση των ονομάτων που εξάγονται από τον πυρήνα

: Exp
πυρήνας
C0320364 MMU_CR4_FEATURES.
C02AC3A4 ACPI_Dissigent
C02AC8A0 i8253_lock
...
C012bda8 do_mmap_pgoff
C012c764 do_munmap
C012c9e8 do_brk.
C011E990 EXIT_MM.
C011E69C EXIT_FILES.

Οι προκλήσεις του συστήματος αντιπροσώπευαν πιο δύσκολες. Άμεση υποστήριξη από Linice. Δεν υπάρχει εδώ (αλλά υποτίθεται ότι είναι, δεδομένης των λεπτομερειών του Linux), οπότε πρέπει να κάνετε αυτό το πράγμα.

Ο πίνακας κλήσεων συστήματος είναι γνωστό ότι είναι ένας πίνακας διπλών λέξεων που αρχίζει με τη διεύθυνση sys_call_table (αυτή η μεταβλητή εξάγεται στον πυρήνα).

Πίνακας κλήσεων συστήματος

; Μεταφέρετε το πρόγραμμα εντοπισμού σφαλμάτων στον τρόπο εμφάνισης διπλών λέξεων.
: DD.

; Πάρτε το τραπέζι στην οθόνη.
: D SYS_CALL_Table
0018: C02AB6A8 C0126ACC F8932650 F89326A0 C013DC10
0018: C02AB6B8 C013DD18 C013D5C8 C013D724 C011F3BC
0018: C02AB6C8 C013D664 C014A8E0 C014A3B4 F893020C

Κάθε στοιχείο του πίνακα ταιριάζει με την κλήση του συστήματος και κάθε κλήση έχει τον δικό του αριθμό που μπορεί να βρεθεί κοιτάζοντας το /usr/include/sys/syscall.h αρχείο, αλλά είναι καλύτερο να το κάνετε κάτω από το Linux, όπου δεν υπάρχουν Άμεσοι αριθμοί, αλλά δανείζονται ότι το ίδιο αρχείο από το BSD είναι ο ίδιος αριθμός των βασικών κλήσεων του συστήματος σε όλα τα συστήματα συμπίπτουν. Συγκεκριμένα, το σύστημα κλήσης του συστήματος ανοίγει στο νούμερο 5.

Για να ρυθμίσετε το σημείο διακοπής ανοίγματος, πρέπει να γνωρίζετε τη διεύθυνσή του που βρίσκεται στην πέμπτη διπλή λέξη του πίνακα κλήσεων του συστήματος, μετρώντας από το μηδέν και ίσο (σε αυτή την περίπτωση) C013D5C8H.

Ρύθμιση του σημείου διακοπής στην κλήση ανοικτού συστήματος

; Τοποθετήστε το σημείο διακοπής στην κλήση ανοικτού συστήματος,
: BPX C013D5C8.
; βγαίνουν από το πρόγραμμα εντοπισμού σφαλμάτων,
: Χ.
...
# ανοίξτε κάποιο αρχείο
...
; Το πρόγραμμα εντοπισμού εντοπισμού εμφανίζεται αμέσως, μας λέει γι 'αυτό,
: Σημείο διακοπής λόγω BPX 01

; Αφήστε την εντολή Proc να σιγουρευτεί ότι σφυρίξαμε τη δική σας διαδικασία.
: Prox
PID TSS Κατασκευή UID GID Όνομα
1049 0000 F6364000 Sleeping 0 0 Getty
1145 0000 F61CC000 Sleeping 0 0 Mc
1146 0000 F614A000 Sleeping 0 0 CONS.Saver

Με αυτόν τον τρόπο, είναι εύκολο να ενσωματώσετε σε ήδη εκτελεστικές διεργασίες, ρυθμίζοντας τα σημεία διακοπής στις κλήσεις του συστήματος που χρησιμοποιούν από αυτούς, καθώς και να κάνουν πολλά άλλα πράγματα που είναι ζωτικής σημασίας για την πειρατεία.

συμπέρασμα

Παρά τη φρανκλαμιά τους Linice. Είναι αρκετά κατάλληλο για την προστασία των προστατευόμενων εφαρμογών, αν και εντελώς και κοντά πρέπει να καταφεύγουν σε λύσεις παράκαμψης που εκτελούνται σε κανονικούς υπολογιστές για το μηχάνημα. ως εκ τούτου Linice. Δεν αντικαθιστά το GDB, αλλά το συμπληρώνει μόνο.