Le principe du débogueur de base du système d'exploitation. Déboguer le mode du noyau du système d'exploitation Windows Qu'est-ce que le débogage du noyau

Comment lancer le débogueur du noyau?

Réponse de la maîtrise:

Dans le processus de développement de logiciels, il existe une composante très importante - c'est le débogage. En ce qui concerne les programmes d'application, il est effectué par des moyens qui fonctionnent en mode utilisateur et souvent intégrés à l'IDE. Afin de pouvoir dévier, par exemple, le conducteur, le débogueur du noyau doit être lancé.

Vous devez exécuter le processeur de commande CMD. Ouvrez le menu Démarrer dans la barre des tâches. Dans la fenêtre qui apparaît, cliquez sur "Exécuter ...". La fenêtre "Programme de démarrage" apparaît. Dans la zone de texte, entrez CMD, puis cliquez sur le bouton "OK".

Créez maintenant une sauvegarde du fichier boot.ini. Tout d'abord découvrez le chemin d'installation de la copie actuelle de Windows à l'aide de la commande: echo% systemroot%

Ensuite, allez sur le disque, avec le système d'exploitation installé en entrant dans les listers de périphérique et, après eux, mettez le côlon. Utilisation de la commande CD, allez dans le répertoire racine. En utilisant maintenant la commande APT, supprimez les attributs "masqués", "lecture seule" et "système" à partir du fichier boot.ini. Commande Copy Créez une sauvegarde, puis définissez les attributs à la place.

Pour supprimer la liste d'options de téléchargement en cours, utilisez la commande booCFG / requête. Affichez la liste et définissez cet élément sur la base de laquelle de nouveaux paramètres seront créés avec la possibilité de déboguer en mode noyau. L'identifiant d'enregistrement de démarrage doit être rappelé.

Utilisez la commande bootcfg / copie pour créer un enregistrement de démarrage. Afin de spécifier l'identifiant d'enregistrement que vous copierez, utilisez le paramètre / ID. Utilisation du paramètre / D, définissez le nom d'enregistrement qui sera affiché. Vous devez maintenant revenir à la liste Options de téléchargement à l'aide de la commande bootcfg / requête et consultez l'identifiant d'entrée ajouté.

Maintenant, vous devez activer les options pour démarrer le débogueur du noyau à l'enregistrement de démarrage précédemment créé. Si vous débogez sur la machine cible, il vous suffit d'ajouter l'option / débogage.

Si vous souhaitez implémenter un débogage à distance avec la connexion de l'ordinateur cible via le port COM sur la machine hôte, utilisez les options / port et / bauds pour spécifier le numéro de port et le taux de change.

Si vous débogage à distance via le câble Firewire (interface IEEE 1394), alors pour activer le mode approprié, utilisez l'option / dbg1394 et pour spécifier l'option Numéro de canal / CH.

Pour vous assurer que les modifications sont effectuées, vérifiez le démarrage à l'aide de la commande bootcfg avec le paramètre / requête. En mettant la commande de sortie, fermez la fenêtre du processeur de commande.

Si nécessaire, modifiez les paramètres de démarrage du système d'exploitation. Ouvrez le panneau de commande dans le menu Démarrer et ouvrez l'élément "Système" déjà dedans. Dans la fenêtre "Propriétés du système" qui s'ouvre, sélectionnez l'onglet Avancé. Dans cet onglet, sélectionnez une section avec le nom "Télécharger et récupération", puis cliquez sur le bouton "Paramètres". Dans la fenêtre "Charge and Récupération" qui apparaît, vous devez activer l'option "Afficher la liste des systèmes d'exploitation". Fermez les deux boîtes de dialogue avec le bouton «OK».

Effectuer un ordinateur pour redémarrer. Sélectionnez Chargement avec du débogueur. Connectez-vous au système et commencez à travailler sur la machine cible ou commencez à déboguer à distance. Profitez des moyens tels que WINDBG et KD.

Cette série d'articles apparaissait pour deux raisons. Tout d'abord, j'aime travailler avec le projet HackSystexTremEvulnerAfriverRiver . Deuxièmement, j'ai eu voeux de masse Illuminer ce sujet.

Tout le code utilisé par écrit cette série est dans mon référentiel.

Dans ce cycle d'articles, nous envisagerons d'écrire les exploits du niveau du noyau sous Windows. Il est important de noter que nous allons traiter avec des vulnérabilités bien connues et dans l'ingénierie inverse, il n'y a pas besoin (au moins pour le conducteur).

On suppose qu'après familiariser avec tous les articles, vous connaîtrez toutes les classes et méthodes de fonctionnement les plus courantes, et pourrez également les exploiter de l'architecture X86 à l'architecture X64 (si possible) et lire les dernières méthodes de protection dans Windows 10.

Schéma de débogage du noyau

Contrairement au débogage au niveau de l'utilisateur, lorsque l'exécution d'un processus séparé est suspendue, l'ensemble du système est activé au niveau du noyau et nous ne pourrons pas utiliser cette méthode. En conséquence, vous avez besoin d'une machine de débogage distincte pouvant communiquer avec le système dans lequel le noyau est débogué, affiche la mémoire et la structure du noyau, ainsi que de capturer les couleurs du système.

Matériel supplémentaire pour l'étude:

Fonctionnement des vulnérabilités du noyau

Ce processus est beaucoup plus amusant que de fonctionnement au niveau de l'utilisateur J.

L'objectif principal est d'atteindre une exécution privilégiée dans le contexte du noyau. Et puis tout dépend de notre imagination, allant d'un animal de compagnie avec de la bière domestique et se termine par l'introduction de la malveillance parrainée par l'État.
En général, notre tâche consiste à obtenir une coquille avec des privilèges système.

Fils d'articles de ce cycle

  • Partie 1: Définition de l'environnement de travail
    • Configuration de trois machines et systèmes virtuels qui serviront de débogueur.
    • Configuration du débogueur Windbg.
  • Partie 2: Charges utiles
    • Étude des charges bénéfiques les plus courantes. Dans les pièces suivantes, des vulnérabilités spécifiques seront examinées et, si nécessaire, se réfèrent à cet article.
  • Autres parties.
    • Prise en compte des vulnérabilités.

Le cycle de vie du développement du niveau du niveau du noyau

  • Trouver une vulnérabilité. Ce sujet ne sera pas pris en compte dans ce cycle, car nous savons déjà exactement où se trouvent les barres.
  • Interception du flux d'exécution. Certaines vulnérabilités prévoient l'exécution du code, car certaines sont des exigences supplémentaires.
  • Expansion des privilèges. L'objectif principal est d'obtenir une coquille avec des privilèges système.
  • Restaurer le flux d'exécution. Des exceptions non comptabilisées au niveau du noyau entraînent l'effondrement du système. Si vous n'allez pas écrire Exploice pour une attaque DOS, ce fait devrait être pris en compte.

Types de systèmes cible

Nous travaillerons avec des vulnérabilités dans les systèmes suivants (version spécifique n'est pas fondamentale):

  • Win7 x86 vm.
  • Win7 x64 vm.
  • Win10 x64 vm.

Commençons par l'architecture X86, puis nous ferons passer l'exploit pour le système Win7 X64. Certains exploits ne seront pas exécutés sur des machines avec Win10 en raison de la présence de nouvelle protection. Dans ce cas, nous modifions la logique du travail d'exploitation, soit nous utiliserons une approche complètement différente.

Logiciel utilisé:

  • Hypervisor (options de masse).
  • Windows 7 x86 vm
  • Windows 7 x64 vm
  • Windows 10 x64 vm

Mise en place de systèmes de débogage

Les systèmes de débogage avec lesquels nous interagirons sont destinés à télécharger un pilote vulnérable. Sur ces machines, l'effondrement se produira souvent, car la plupart des exceptions dans le noyau contribuent aux phénomènes de ce type. Il est nécessaire de mettre en évidence suffisamment de RAM pour ces systèmes.

Sur chaque machine qui sera débiguée, vous devez procéder comme suit:

  • Dans le répertoire VirtualKD, exécutez le fichier cible \\ vminstall.exe. Un nouvel enregistrement de démarrage sera ajouté et les fonctions de débogage seront disponibles et la connexion automatique au serveur VirtualKD installé dans le système qui agit comme un débogueur.

Dans le cas de Windows 10 VM, vous devez activer le mode de signature de test, ce qui vous permet de télécharger des pilotes non signés sur le noyau.

Après avoir exécuté le BCDEDITIT / SET TESSAGE ON et Redémarrez sur le bureau, "Mode Tester" apparaîtra.

Brève description Module Hevd

La procédure de chauffeur de chauffeur est le début de chaque pilote:

NTStatus Driverytry (dans PDriver_Object DriverObject, dans Punicode_string RegistryPath) (
Uint32 i \u003d 0;
Pdevice_Object DeviceObject \u003d null;
Ntstatus status \u003d statut_unsuccassé;
Unicode_string Devicename, nom DosDevicename \u003d (0);

Non référencé_paramètre (registryPathe);
Paged_code ();

Rverlinitinicodestring (& dvicename, l "\\\\ appareil \\\\ \\\\ hacksystextremevulnerAfriver");
Rverlinitunicodestring (& dosdevicename, l "\\\\ dosdevices \\\\ hacksystextremevulnernerAfriver");

// Créer l'appareil
Statut \u003d ioCreateDevice (DriverObject,
0,
& Nom de l'appareil
File_device_unknown,
Fichier_device_secure_open,
Faux
& AppareilsObject);

  • Cette procédure comprend l'appel de la fonction iocreateDevice contenant le nom du pilote que nous utiliserons pendant la communication.
  • L'objet DriverObject ajoutera les structures et les pointeurs souhaités aux fonctions.
  • Pour nous, le pointeur de fonction associé à la procédure DriverObject-\u003e MajorFunction est important pour le traitement IOCTL (contrôle d'E / S; contrôle d'entrée / sortie);
  • Dans HEVD, cette fonctionnalité s'appelle un Irpdeviceioctlhandler, qui est une excellente expression conditionnelle avec une multitude de branches pour chaque IOCTL. Chaque vulnérabilité a une ioctl unique.

Exemple: hacksys_evd_ioctl_stack_overflow est un IOCTL utilisé pour activer les barres associées au débordement de la pile.

C'est la première partie se termine. Dans le prochain article, nous parlerons de la charge utile. Pour le moment, seule la charge bénéfique est disponible pour vol de jetons, qui seront utilisées dans la troisième partie.

P.s. Je comprends qu'il y a beaucoup de subtilités et de problèmes avec lesquels vous pouvez rencontrer. Étant donné que ce cycle se concentre sur le développement d'exploits, vous devrez résoudre vous-même tous les problèmes associés. Cependant, toutes les questions que vous pouvez poser dans les commentaires.

  • Auteurs:

    Barinov S.S., Shevchenko O.G.

  • An:
  • Une source:

    Informatique et technologie informatique / documents de la VI Conférence scientifique et technique internationale des étudiants, des étudiants diplômés et des jeunes scientifiques - 23-25 \u200b\u200bnovembre 2010, Donetsk, DonnTu. - 2010. - 448 p.

annotation

Une analyse comparative du débogage du mode utilisateur et du mode noyau est appliquée au système d'exploitation Microsoft Windows, distingue et les problèmes d'organisation de ce dernier débogage. Sur la base des résultats obtenus, les principales exigences relatives à la construction de raclecteurs de régime de noyau en cas de débogage d'urgence et interactif. Une analyse des solutions existantes a été réalisée pour le respect des exigences. En particulier, une attention particulière est accordée au débogueur Microsoft Windows Debugger.

Partie principale

Le débogage est le processus de détermination et d'élimination des causes des erreurs dans les logiciels. Dans certains projets, le débogage prend jusqu'à 50% du temps de développement total. Le débogage peut être considérablement simplifié lorsque l'utilisation d'outils spécialisés en cours d'amélioration constante. L'outil principal est le débogueur, qui vous permet de contrôler la mise en œuvre du logiciel, de regarder son déplacement et d'interférer avec elle. Les outils de débogage du noyau sont principalement utilisés par les développeurs de pilotes.

Application Software Development Toolkit propose une large gamme de fonctionnalités. Tout environnement de développement intégré inclut la possibilité de déboguer sans qu'il soit nécessaire d'utiliser des services publics tiers. Si nous parlons de logiciels systémiques et que nous développons des conducteurs en particulier, alors en vertu de ses spécificités, le processus de développement est extrêmement difficile et peu automatisé. Toutes les phases de développement, y compris le débogage, sont séparées. Pour effectuer chacune d'elles, des conditions spéciales sont nécessaires: la rédaction du code du programme est effectuée sur un système informatique à part entière, le débogage - sur le système de débogage, les tests - en fonction des circonstances, etc. Le même débogueur du régime du noyau est plus complexe dans le développement et, en conséquence, moins sympathique.

En général, nous pouvons parler du manque de débogage de base. Bien que ces moyens soient disponibles, il n'est souvent pas nécessaire de parler d'alternatives. Par exemple, le débogueur de Microsoft Windows Debugger a un seuil d'entrée trop élevé. De nombreux programmeurs parlent de la première expérience négative pour le rencontrer et la plupart de ses possibilités restent brûlées.

Basé sur la structure de l'espace d'adresses virtuel, si une erreur est effectuée dans l'application, l'application enregistrera des données dans un emplacement de mémoire arbitraire, l'application n'endommagera que sa propre mémoire et n'affectera pas le fonctionnement de l'autre. applications et système d'exploitation. ATTENDU QUE le code de mode principal est capable d'endommager les importantes structures de données du système d'exploitation, ce qui entraînera inévitablement une défaillance commune. Le conducteur inefficacement écrit peut également causer une dégradation grave de l'ensemble du système d'exploitation.

    Les debuggers modernes fournissent les fonctions de base suivantes:
  • débogage au niveau du code source;
  • gestion d'exécution;
  • voir et changer la mémoire;
  • voir et modifier le contenu des registres du processeur;
  • voir la pile d'appels.

Pour faciliter le travail avec le code de démontage, les soi-disant sont utilisés. Personnages de débogage. Au cours du travail de la liaison, en plus de l'image du fichier exécutable, un fichier de données peut également être créé contenant des informations qui n'est pas requise lors de l'exécution du programme, mais il est extrêmement utile lors du débogage: les noms des fonctions, globales Variables, description des structures. Les caractères de débogage sont disponibles pour tous les fichiers de système d'exploitation Windows exécutables.

Selon le contrôle d'exécution, la possibilité d'interrompre et de renouveler l'exécution du code du programme pour obtenir une commande spécifiée dans le code de programme. Si le code de programme est exécuté en mode étape par étape - l'interruption se produit pour chaque langage de programmation Lexeme ou lors de la sortie du sous-programme. Avec une exécution gratuite, l'interruption de l'exécution se produit dans des sections avancées des lieux de code dans lesquels les points d'arrêt sont installés.

Lors de l'interruption du code de mode principal, le dilemme suivant se produit. Le débogueur pour interagir avec le programmateur utilise l'interface utilisateur. Ceux. Au minimum, la partie visible du débogueur est effectuée en mode utilisateur et utilise naturellement l'interface de programmation d'application (API Windows), qui repose à son tour sur les modules de mode du noyau. Ainsi, la suspension du code de mode principal peut entraîner un blocage mutuel: le système cessera de répondre aux demandes des utilisateurs.

Pour accéder à la mémoire du noyau, les composants du débogueur doivent également être effectués en mode noyau. Cela conduit à l'émergence de deux problèmes à la fois, ce qui constitue une conséquence évidente de l'organisation de la mémoire dans le mode processeur protégé.

Le premier problème concerne la diffusion d'adresses de mémoire virtuelle. Les conducteurs interagissent constamment avec les applications de régime utilisateur en ajoutant un accès à leur mémoire. Le système d'exploitation Windows diffuse des adresses virtuelles à la physique, guidée par le concept du contexte du flux. Le contexte du flux est une structure qui reflète l'état du flux et comprenant notamment un ensemble de registres et d'autres informations. Lorsque le contrôle est transmis à un autre flux, un commutateur de contexte se pose, dans lequel des informations sur un flux sont enregistrées et des informations sur l'autre sont restaurées. Lorsque vous passez le contexte du flux dans un flux d'un autre processus, le répertoire de page utilisé pour diffuser des adresses virtuelles à physiques est également commuté.

La particularité est que lors de l'appel du système de répartition, le système d'exploitation Windows ne change pas le contexte. En raison de cela, le code mode du noyau peut utiliser l'adresse virtuelle du mode utilisateur.

Sinon, la situation est lors de l'interruption de l'interruption ou de l'exécution de threads de système. L'interruption peut survenir à tout moment, il est donc impossible de prédire quel contexte du flux sera utilisé. Les flux systémiques n'appartiennent à aucun processus et ne peuvent pas diffuser une adresse virtuelle du mode utilisateur. À partir de là, il s'ensuit que dans ces situations, il est impossible de faire référence à la mémoire du régime utilisateur.

Le deuxième problème est de faire appel à la mémoire mobile. La plupart des informations de la mémoire sont le déplacement et à tout moment peuvent être déplacés de la mémoire physique sur un disque dur dans le fichier de page. Si vous vous référez à la page qui est absent dans la mémoire physique, dans une situation normale, le processeur générera une interruption de la mémoire du gestionnaire de mémoire et, par conséquent, la page sera lue à partir du fichier de page et chargée dans le fichier. mémoire physique.

Le comportement décrit est violé si le code du programme du débogueur est obligé d'utiliser un niveau élevé de requête d'interruption (niveau de demande d'interruption, IRQL). Avec IRQL, qui coïncide avec ou dépassant le gestionnaire de mémoire IRQL, la Dame ne sera pas en mesure de charger la page manquante, car Le système d'exploitation bloquera la défaillance de la page d'interruption. Cela conduira à l'effondrement du système d'exploitation.

Le débogage est accepté pour interactif et d'urgence. Avec le débogage local interactif, le débogueur est effectué dans le même système que l'objet de débogage. Avec le débogage interactif à distance, le débogueur et l'objet de débogage sont effectués dans différents systèmes. Lors du débogage du code du noyau, le système doit être surveillé, à partir des premières étapes de son téléchargement, lorsque le réseau ne fonctionne pas encore, par conséquent, des interfaces série simples, telles que COM, FireWire, USB, sont utilisées pour communiquer des systèmes. Récemment, en raison des tendances du développement de la virtualisation du logiciel à différents niveaux d'abstraction, des machines virtuelles sont de plus en plus attirées. Guestside OS agit comme un débogué, le système d'exploitation placé inclut l'interface utilisateur du débogueur.

Ainsi, pour le débogage d'urgence, vous n'avez pas besoin d'installer un outil de débogage sur l'ordinateur de test. La distribution du système d'exploitation Windows comprend des mécanismes de mise en œuvre du débogage d'urgence. Avant de redémarrer, le système d'exploitation peut enregistrer des informations sur son état que le développeur peut analyser et découvrir la cause. Ces informations stockées dans un fichier s'appellent une mémoire de mémoire.

Les moyens de débogage de mode de base de base sont fournis par le fabricant du système d'exploitation Windows dans le cadre des outils de débogage gratuits pour le package Windows. Les outils incluent les périphériques graphiques et de la console de WINDBG et de KD, respectivement (ci-après Windows Debugger). Les travaux de ces débuggeurs reposent sur les mécanismes prévus par les développeurs du système d'exploitation et posés dans son noyau.

Le mode principal pour Windows Debugger est le mode Interprète de commande. En raison de la structure modulaire, ainsi que des développeurs fournis, les commandes de débogueur Windows prend en charge les modules tiers appelés extensions. En fait, la plupart des commandes intégrées sont également décorées sous forme d'extensions.

Windows Debugger est axé sur le débogage interactif et d'urgence à distance, lorsque l'utilisation de toutes ses capacités est révélée. Dans le même temps, le débogage interactif local à part entière n'est pas pris en charge: le débogueur permet uniquement de voir certaines structures de noyau.

Il y a un module d'extension pour Windows Debugger appelé LiveKD, créé par Mark Russinianovich, qui implémente en quelque sorte le débogage interactif local. Livekd sur le Go crée une vidage de la mémoire du système de travail et l'utilise pour le débogage.

Les outils «Outils de débogage pour Windows» sont régulièrement mis à jour et prend en charge tous les systèmes d'exploitation de Windows modernes.

Le débogueur du noyau Softice, produit par Compuware dans le package logiciel Driverstudio, effectué traditionnellement une alternative au paquet "Outils de débogage de Windows". Une caractéristique distinctive de Softice a été la mise en œuvre de débogage interactif local sur le matériel pris en charge. Le débogueur pourrait presque contrôler complètement le fonctionnement du système d'exploitation.

Du 3 avril 2006, la vente des produits de la famille Driverstudio a été interrompue en raison des "nombreux problèmes techniques et commerciaux, ainsi que le statut général du marché". La dernière version du système d'exploitation, dont le support a été implémenté est Windows XP Service Pack 2. En règle générale, les mises à jour de service ne modifient pas l'interface d'application du système d'exploitation, mais le nombre de numéros d'appel système et d'autres informations non documentées peuvent subir un monnaie. Le débogueur de Softice s'est appuyé sur des adresses de structures de données internes à prescription rigoureusement prescrites. En conséquence - avec la maintenance de Service Pack 3 La compatibilité était cassée. Évidemment, des versions plus précises du système d'exploitation Windows ne sont également pas prises en charge.

SYSER KEnel Debugger créé par une petite entreprise chinoise Sysersoft comme remplacement d'un débogueur de Softice. La première version finale a été publiée en 2007. Comme Softice, SYSER Kernel Debugger est capable d'effectuer un débogage interactif sur le système d'exploitation. Prises en charge ne sont que des éditions 32 bits de versions modernes de Windows.

Pour le moment, Windows Debugger est l'outil principal des développeurs des modules du noyau. Il utilise également l'équipe de développement de base du système d'exploitation Windows.

Debugger - le second après le compilateur, il est nécessaire de créer des programmes. Cependant, beaucoup de ceux qui écrivent des programmes informatiques et utilisent le débogueur, ne savent pas quels sont les principes et les mécanismes de son travail.


C'est difficile d'être débogueur ...

À la lumière du fait que les programmeurs utilisent le dîner de débogueur et Nosno, surtout lorsqu'ils entrent en mode de débogage profond, il vaut la peine de dire que si un débogueur n'est pas un programme, mais un morceau de fer, il se surchauffait et cassé . Parce que beaucoup de travail, à quel point il s'en va par le débogueur, n'a même pas le compilateur.

Bien sûr, depuis maintenant bon nombre de toutes les langues de programmation, alors les débuggeurs pour chacun d'eux leur propre. Et, naturellement, pour différentes catégories de ces langues, il existe des différences dans les travaux des débuggeurs: par exemple, le débogueur des programmes sur l'interprétation de rubis fonctionnera différemment que pour la langue Java compilée dans le code d'octet et le débogueur Pour Java, à son tour, aura des différences de débogueur Visual C ++.

Je parlerai de déboguer pour la plate-forme Windows. Réaliser les principes du travail des débuggeurs pour elle, il sera possible de traiter des débuggeurs dans le système POSIX, et avec des debuggotes qui ne fonctionnent pas au niveau du système d'exploitation, mais au niveau de la machine virtuelle ou de tout interprète .


Detcricoteurs pour Windows: deux types

Il y a deux types de débuggeurs fondamentalement différents sous Windows. Je pense que tout était confronté à tout lorsqu'il est programmé sur Delphi (pas programmé dessus? Il est difficile de croire. Qu'es-tu programmés à l'école et aux cours juniors?). Ce sont des applications personnalisées de rapatriés. Ils en sont assez nombreux et existent individuellement et (surtout, souvent) dans le cadre des environnements de développement d'applications intégrés. Parmi les débuggeurs distribués en tant que produits logiciels distincts, allouer traditionnellement OLLYDBG, et j'en ai écrit une fois à ce sujet dans "l'ordinateur westi".

Le deuxième type de debuggleters est les débuggeurs de base du système d'exploitation. Ils se rencontrent et sont utilisés moins souvent et par leur appareil diffèrent considérablement des applications utilisateur du débogueur. Le plus célèbre, et, en même temps, le meilleur débogueur de base est Softice. Peut-être que vous avez non seulement entendu parler de lui, mais même utilisé.

Étant donné que le travail de chacun des deux types de débuggle a ses propres détails, je vous en dirai à propos de chacun d'eux.


Applications utilisateur de débogueur

Le débogueur d'applications personnalisées est plus simple car le travail noir et sale prend sur le système d'exploitation. Windows dispose d'interfaces logicielles spéciales conçues pour déboguer les applications au niveau de l'utilisateur - elles sont appelées API de débogage Windows. Il s'agit d'API de débogage qui sont utilisées par tous les debuggotes intégrés dans des environnements de développement intégrés populaires pour Windows.

Pour le début du débogage, le débogueur doit démarrer le processus de débogué spécialement - afin que le système sait que ce processus subira le débogage. Après cela, le cycle de débogage commence: le programme est exécuté avant le début d'un événement donné, appelé - un événement de débogage ou un événement de débogage. Dans ce cas, le cycle de débogage est lancé dans un flux séparé pour empêcher la suspension du débogueur.

Mais ce n'est que le début. Parce que la chose la plus intéressante dans le travail du débogueur commence lorsque l'événement de débogage s'est produit. Après tout, en fait, quel est le travail du débogueur? Pour aider le programmateur à localiser une erreur avec une précision à une fonction spécifique, une opération spécifique, une variable spécifique. Dans ce cas difficile, le débogueur peut également aider le système d'exploitation.

Ainsi, l'événement de débogage s'est produit, puis il est nécessaire de savoir comment il est lié au texte du programme. Ceci est possible uniquement si des informations spéciales de débogage sont activées dans le programme lui-même - l'onglet des caractères de débogage. Il contient des informations sur la conformité entre les adresses et les fonctionnalités des fonctionnalités, des types de données, du nombre de lignes de code. C'est grâce à eux qui est que le débogage à partir duquel chaque programmeur Windows est familier. Les tables de symboles ont des formats différents et il n'est donc pas toujours possible de déboguer un programme compilé par un compilateur d'un seul développeur à l'aide d'un débogueur d'un autre fabricant. Mais, cependant, le format le plus courant peut toujours être spécifié - il s'agit de PDB (base de données de programme), et elle est conçue, naturellement, Microsoft Corporation.

Ainsi, si la table de débogage des caractères a un format PDB, vous pouvez utiliser un outil spécial de Microsoft Corporation - un processeur de débogage symbolique. Une fois entré au cœur du système et s'appelait imagehlp.dll, mais il y a longtemps a été mis en surbrillance dans une bibliothèque distincte. Le processeur de symboles vous permet de trouver à une adresse donnée à la fonction ouverte la plus proche ou à une variable globale, ainsi que du numéro de la chaîne et du nom du fichier texte source, dans lequel cette ligne est située. Les opérations inversées sont prises en charge, par exemple, recherchant l'adresse d'adresse par son nom.

Ceci, bien sûr, n'est pas tout le travail que le débogueur est engagé dans des applications personnalisées. Par exemple, lors du débogage des applications multi-threadées, de nombreux moments très subtils associés à l'interaction des flux apparaissent. Même lors du débogage de telles choses relativement simples, comme des services, il y a des nuances.

Mais sur les nuances, nous ne nous arrêterons pas à la fin - à la fin de l'article, je vous dirai où lire à leur sujet. Regardons maintenant les débuggeurs du noyau.


Débogueur nucléaire

Core Debuggers - Les programmes sont beaucoup plus compliqués que les débuggeurs des applications utilisateur, et je suppose, il est tout à fait clair pourquoi: ils n'ont aucun assistant sous la forme d'un système d'exploitation. Dans ce cas, c'est leur client, car c'est elle, finalement, devrait déboguer.

La plupart des débaucheurs du noyau nécessitent deux ordinateurs connectés à leur travail, reliés par un câble à modem zéro. Zéro-modem est un moyen de connecter deux ordinateurs directement par câble via leurs ports COM ou LTP. Le deuxième ordinateur est nécessaire, car une partie du débogueur assise sur la première (sur laquelle le système de créance est installé) a un accès limité au matériel et la totalité de la sortie des données est null au deuxième ordinateur.

Dans les transformateurs modernes de l'architecture Intel X86, il existe des registres de débogage spéciaux (et dans l'ancien 368ème et dans les nouveaux modèles de transformateurs d'entre eux, à seulement huit ans, ils sont appelés DR0-DR7). Ces registres permettent au débogueur de définir les points de contrôle pour la lecture et l'enregistrement de la mémoire, ainsi que sur les ports d'E / S. En général, tout ressemble à cela, et je ne pense pas que cela vaut la peine d'écrire en détail en détail, pour lequel chacun des registres de débogage est responsable, quelles interruptions sont mises en œuvre par le point d'arrêt et donnent d'autres informations similaires. Il est préférable de parler des bibliothèques existantes spécifiques du noyau pour Windows.

Eh bien, tout d'abord, il s'agit d'un débogueur intégré au noyau du système d'exploitation. Il se trouve dans toute la règle du système d'exploitation NT, commençant par Windows 2000. Cela fait partie du fichier NTOSKRNL.EXE, et vous pouvez l'activer en définissant l'option "/ Débogage" du système d'exploitation dans Boot.ini. Ce débogueur a besoin d'une connexion zéro-modem et du deuxième ordinateur avec le même système d'exploitation.

Il y a un autre débogueur du noyau de Microsoft - Windbg. Strictement parler, ce n'est pas un débogueur du noyau, mais un débogueur hybride pouvant également être utilisé pour déboguer les applications du niveau utilisateur. Il, contrairement au débogueur intégré dans le noyau, a une coque graphique, et il est donc plus facile de l'utiliser. Ce débogueur prend également en charge des extensions spéciales pouvant être utiles lors de la résolution des tâches de débogage. Mais cela nécessite également deux ordinateurs de déboguer le noyau.

Cependant, un débogueur du noyau peut être débogué sur un seul ordinateur. Ceci est un softice. Dans le même temps, Softice peut déboguer et programmes d'application. L'utilisation de ce débogueur pour les programmes utilisateur est justifiée, par exemple, dans le cas de débogage de systèmes en temps réel attaché à une minuterie système. Si vous corrigez le débogage à l'aide d'un débogueur ordinaire, le résultat peut être incorrect même si le programme fonctionne correctement et que Switice arrêtera le programme et la minuterie. Ceci est utile lors du débogage des applications multi-threadées. À tout moment, Switice a des moyens très bien développés de sortie d'informations sur tous les flux du système, sur la synchronisation des flux d'applications multi-threadées, des informations sur la poignée "Ah ... Le seul moins de ce débogueur est sa complexité pour le programmeur d'application. Mais à partir des débuggeurs de base, c'est le plus facile et le plus efficace.


Pour le plus curieux curieux

Maintenant, bien sûr, une conversation sur le débogueur pour les applications Windows n'est pas aussi pertinente qu'il ya dix ans. Le monde entier s'est intéressé à Internet et les principaux utilisateurs de Softice sont devenus Valley, travailleurs inlassables sur le piratage de la Niva. Néanmoins, ce n'est pas si mauvais. Communication avec Softice "OM, sans aucun doute, développe une personne en termes de connaissances sur l'ordinateur, bien que, bien sûr, si vous ne communiquez que avec du débogueur et que vous ne communiquez pas avec des personnes vivantes, certains effets secondaires sont possibles. Eh bien, je pense que je pense que tout le monde devine.

Les debuggers sont l'un des types de logiciels les plus particuliers, mais en termes de développement, même des passeurs de niveau des utilisateurs sont assez complexes. Mais, néanmoins, si vous avez le désir et le temps afin de développer votre propre débogueur, vos connaissances dans le domaine des systèmes d'exploitation et de la programmation augmenteront de manière significative et, par conséquent, les chances de travail hautement rémunéré augmenteront.

Donc, si vous souhaitez créer votre propre débogueur, vous devez d'abord vous familiariser avec les documents sur ce sujet. À mon avis, la meilleure allocation pour le début sera le livre de John Robbins "Débogage des applications Windows". Elle est déjà l'ancienne, l'édition de 2001, mais les informations énoncées sont pertinentes et maintenant, comme elle a un commun, même à certains égards une nature fondamentale. Dans ce livre, il existe des exemples de débogueur d'écriture pour Windows, en outre, il vous sera utile si vous programmez sur C ++ et que vous souhaitez mieux comprendre le traitement des exceptions. En fait, c'est de ce livre que j'ai appris sur le débogueur énoncé dans l'article. Si vous trouvez que ce livre ne fonctionnera pas (après tout, il est déjà assez vieux), il existe plusieurs adresses que vous pouvez accomplir à portée de main. Le premier est celui-ci: www.xakep.ru/post/19158/default.asp. Cet article du magazine "Hacker" raconte plus de détails sur les débuggeurs du noyau que moi et, en outre, il contient le code du débogueur le plus simple. Et à Kalachnikoff.ru/assembler/issues/016.htm, vous pouvez apprendre à écrire un DOS débogueur. Mais, bien sûr, il est préférable de lire MSDN et de trouver simultanément du débogueur avec des textes open source pour y faire face. Bien sûr, si vous êtes venu écrit un débogueur, alors le succès de vous dans cette affaire difficile!

Pour déterminer le noyau, vous devez vous connecter à l'ordinateur à l'aide d'un câble à modem zéro ou d'une connexion modem. Un ordinateur de débogage s'appellera "hôte", et le nom "cible" recevra un problème.

Les deux ordinateurs doivent fonctionner à exécuter la même version de Windows et les fichiers de caractères de l'ordinateur cible doivent être installés sur l'ordinateur hôte. Les fichiers symboliques sont fournis sur le CD d'installation de Windows dans le répertoire Support \\ Débogage.

Pour activer le débogage, vous devez modifier le fichier boot.ini sur l'ordinateur cible.

1. Modifier les attributs de fichier boot.ini:

attrib c: \\ boot.ini - r - s

2. Modifiez ce fichier et dans la chaîne de démarrage de Windows, ajoutez le paramètre / Débogage (afin de fournir au système de télécharger la mémoire opérationnelle du noyau de débogueur lors du démarrage de Windows). Les paramètres supplémentaires sont / Debugport, qui signale le système, quel port COM doit être utilisé (par défaut COM2) et / Baudrate - pour spécifier le taux de transfert de données (la vitesse par défaut de 19200 Baud, mais il est préférable d'utiliser 9600). Par example:


MULTI (0) DISQUE (0) Partition RDISK (0) (0) \\ Windows \u003d "Windows NT" / Débogou / Debugport \u003d COM2 / Baudrate \u003d 9600

3. Enregistrez le fichier.

4. Installez les attributs de fichier BOOT.INI précédents:

attrib c: \\ boot.ini + r + s

Dans cet exemple, l'ordinateur cible a permis la connexion via le port COM2 à une vitesse de 9600 bits / s.

L'ordinateur hôte doit être configuré à l'aide des paramètres requis pour le débogage. De plus, des fichiers symboliques doivent être installés. Pour les installer, accédez au répertoire \\ support \\ débogage du CD d'installation et entrez la commande suivante:

expndyming : <целевой диск и каталог>

Par example:

expndsym F: D: \\ Symboles

L'installation peut prendre un certain temps. N'oubliez pas que si les packages de mise à jour ont été installés sur l'ordinateur cible, ces fichiers de caractères de packages doivent également être installés sur l'ordinateur hôte. Les fichiers symboliques pour les packages de mises à jour peuvent être téléchargés à partir du site de Microsoft.

La prochaine étape consiste à configurer les variables d'environnement requises pour le débogage, par exemple des variables indiquant l'emplacement des fichiers symboliques, etc. Ce qui suit est une description de ces variables.

Description des variables systémiques

La définition de ces variables peut être placée dans le fichier de commande afin d'éviter d'entrer les commandes correspondantes avec chaque téléchargement:

Écho off
SET _NT_DEBUG_PORT \u003d COM2
Ensemble _nt_debug_baud_rate \u003d 9600
SET _NT_SYMBOL_PATH \u003d D: \\ symboles \\ i386
SET _NT_LOG_FILE_OPEN \u003d D: \\ DEBUG \\ LOGS \\ DEBUG.LOG

Maintenant, vous devez copier le logiciel de base de base situé dans le répertoire Support \\ Debug \\<процессор> Sur le CD d'installation (support \\ Debug \\ i386). Le moyen le plus simple de copier l'ensemble du répertoire est complètement, car il a une petite taille (environ 2,5 Mo). Pour la plate-forme I386, le débogueur est utilisé, fourni comme fichier i386kd.exe. Le débogueur commence à utiliser la commande i386KD. Pour entrer la commande, cliquez sur la combinaison de touches. Et attendez que l'invitation de ligne de commande KD\u003e apparaît.

Partager