Windbg Symbol Driver

Résolu
Signaler
Messages postés
5
Date d'inscription
lundi 10 décembre 2007
Statut
Membre
Dernière intervention
11 juin 2009
-
Messages postés
5
Date d'inscription
lundi 10 décembre 2007
Statut
Membre
Dernière intervention
11 juin 2009
-
Bonjour à tous !

 Étant étudiant en informatique, je m'intéresse au driver mais n'ai que de vagues notions.
 Voila j'ai récemment compiler un driver et je souhaiterais pouvoir le debug sous WinDbg. En effet j'aimerais suivre ses étapes par le biais de son code source en C++ (C'est bien possible avec WinDbg rassurez moi ?).
 J'ai en effet config WinDbg en remote 1394 et dispose (il me semble) des bonnes variables d'environnements.
 Cependant je n'arrive pas a charger son .pdb dans Windbg (du moins je crois) et évidemment je ne capte rien à l'assembleur...(?_?)
 Voici le genre d'erreur insupportable :
WARNING: Inaccessible path: 'C:\Documents and Settings\Administrateur\Bureau\Driver\Debug\Driver.pdb'
WARNING: Inaccessible path: 'C:\Documents and Settings\Administrateur\Bureau\Driver'
 Je me suis intéressé à des softs tel que environ.exe ou bugbug mais je n'ai pas trouvé de rapport concret avec ce que je désire faire... (peut-être me trompes-je ?)

 Quelqu'un serait-il capable de m'expliquer le cheminement nécessaire à l'incorporation des symboles de mon driver (.pdb) sous WinDBG afin que je puisse poursuivre mes recherches

Merci d'avance.
David.

PS : Une autre question serait de savoir ce que veut dire cette erreur :
                      CrossNtK.lib(CrossNt.obj) : error LNK2001: symbole externe non résolu _KeNumberProcessors

        (Car elle me pose un léger souci de compil en "Debug" avec VC(qu'elle .lib ajouter?? alors que je compile très               bien avec le compilateur du DDK) mais ce n'est pas la question importante de ce sujet )

11 réponses

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,
Je te rassure, tu pourras déboguer des drivers avec WinDbg avec les symboles et tout. Je l'ai déjà fait avec des drivers en C, en reliant deux PC via le port série ou en utilisant un PC virtuel. Je suis maintenant au boulot, dès que je rentre chez moi ce soir je te fournirais les détails.
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Pour ta question principale:
Pour faire un driver, il faut utiliser le DDK (ou WDK). Le fichier .sys sera généré dans un sous-dossier du genre "objchk_wxp_x86\i386" de ton dossier de travail. Il est toujours accompagné de son .pdb. Pour permettre à WinDbg de le reconnaitre, il faudra aller dans le menu "File" puis choisir "Image File Path" et mettre le chemin complet de ce sous-dossier. Evite d'utiliser des chemin contenant des espaces.

Pour ta question secondaire:
Evite d'utiliser VC. Un driver se fait avec le DDK (ou WDK).
Messages postés
5
Date d'inscription
lundi 10 décembre 2007
Statut
Membre
Dernière intervention
11 juin 2009

Tout d'abord merci a toi Racpp !

 Il est tout a fait possible de compiler un driver avec visual studio ce qui est pratique quand on développe un driver croyez moi ! Pour ce faire il suffit d'installer le DDK Wizard disponible sur le site d'OSR et de paramétrer correctement ses variables d'environnement et autres fichiers .mak ou sources.

 Concernant Windbg, mon problème s'est résolu en utilisant l'outil SymStore.exe disponible dans le dossier de windbg. En effet, racpp, j'avais bien mentionner le bon chemin dans image path... Merci tout de même de ta réponse ca fait toujours enormément plaisir de voir des personnes qui s'investissent et soutiennent de jeunes développeurs (like me ).

 Les outils de windbg (dans son dossier) sont très utiles n'hésitez donc pas à les utiliser, bricoler, etc... !
DDK Wizard peut vous simplifier la vie, mais le DDK de wind est bien sur obligatoire (et plus simple d'util) !

 Je recherche désormais des add-ins ou plug-ins pour VS. En effet je souhaiterais y ajouter le debuggeur de Windbg pour etre plus performant... J'ai bien trouver "AttachWindbg.vsi" sur le net mais je n'arrive pas à l'installer...
 J'ai aussi trouver SOSEX (de Steve Johnson ; http://www.wintellect.com/cs/blogs/jrobbins/archive/2007/06/19/great-sosex-a-phenomenal-net-debugging-extension-to-see-the-hard-stuff-steve-johnson-is-my-hero.aspx) qui m'a l'air sympathique à utiliser (permet de faire de BP directly dans le code source) mais je me demande s'il est compatible avec la création de driver ?! Si quelqu'un à une idée ou autres conseils, je suis preneur !

Encore merci Racpp !
Messages postés
5
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
1 février 2009

Bonjours,

J'ai également un problème similaire:

J'ai correctement installé WinDbg sur mon PC. OS Windows Vista Home Premium. J'ai redémarré en mode debug avec 'bcdedit -debug on' pour utiliser le local debugging.
Mes symbols sont défini: "C:\Windows\Symbols"
Source search path: "C:\WinDDK\6001.18002\Driver"
Image File path: "C:\WinDDK\6001.18002\Driver\objchk_wlh_x86\i386"
La compilation avec WDK se fait sans aucun problème. Le fichier .pdb est bien géré, et le .sys est parfaitement compiler.

Mais après avoir lancer le mode debug en local avec WinDbg, je reçois l'erreur suivante:

Microsoft (R) Windows Debugger Version 6.10.0003.233 X86
Copyright (c) Microsoft Corporation. All rights reserved.

Connected to Windows Server 2008/Windows Vista SP1 6001 x86 compatible target at (Thu Jan 29 17:15:08.782 2009 (GMT+1)), ptr64 FALSE
Symbol search path is: C:\Windows\Symbols
Executable search path is:
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for ntkrpamp.exe -
Windows Server 2008/Windows Vista SP1 Kernel Version 6001 (Service Pack 1) MP (2 procs) Free x86 compatible
Product: WinNt, suite: TerminalServer SingleUserTS Personal
Built by: 6001.18145.x86fre.vistasp1_gdr.080917-1612
Machine Name:Kernel base 0x82640000 PsLoadedModuleList 0x82757c70
Debug session time: Thu Jan 29 17:15:09.031 2009 (GMT+1)
System Uptime: 0 days 0:02:17.877

Comment résoudre cette erreur ?
Encore mieu: Comment debuguer !?
Je ne connais pas bien les commande. La seul chose que j'aimerai faire c'est suivre pas-à-pas l'exécution.
Comment faire svp ?
Messages postés
5
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
1 février 2009

Ahhh... vraiment désoler du double post, mais j'ai trouver comment debuger, il faut lancer "Go".
Mais je reçois ceci:: <<No runnable debuggees error in 'g'>>
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Je sais qu'il est possible d'utiliser VC pour "faire" des drivers bien qu'il ne soit pas conçu pour ça. Je connais le DDK Wizard car je l'avais essayé mais je n'ai pas du tout aimé. A mon avis, c'est du bricolage inutile car en général un code pour driver est assez petit. Le débogage ne peut pas fonctionner car un driver s'exécute en Kernel-Mode.
Pour déboguer un driver avec WinDbg, comme je disais plus haut, il faut utiliser soit 2 PCs soit 1 PC avec un PC virtuel installé dedans. Je préfère la deuxième solution. Le débogage en local n'est pas possible. Il existe SoftIce, en fenêtre DOS like, qui peut le faire en local mais là c'est une histoire. Quand on veut débuguer un driver tout le système se trouve bloqué à chaque  point d'arrêt. C'est la raison pour laquelle on est obligé d'utiliser deux systèmes. Sur le premier, on exécute WinDbg en chargeant le code source et les symboles. Sur le deuxième on exécute le driver. Ainsi on peut le tracer et déboguer comme s'il s'agit d'une application User-Mode  avec tout le confort que cela apporte.
Merci pour les utilitaires de WinDbg. Je ne les connaissais pas car j'en avais jamais besoin.
Messages postés
5
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
1 février 2009

"Merci pour les utilitaires de WinDbg. Je ne les connaissais pas car j'en avais jamais besoin."

Tu utilises quoi alors pour debuger un Driver ?
Ok, pour la Machine Virtuel, mais pourrai tu me donner plus d'info stp ?
Messages postés
5
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
1 février 2009

Je retire, j'ai trouvé un tuto. Je vous tiens au courant si j'ai un problème :p
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Pour déboguer un driver j'utilise WinDbg sans les utilitaires qui se trouvent dans son dossier. Pour le PC virtuel tu peux utiliser Virtual PC 2007 ou tout autre logiciel de virtualisation.
Messages postés
5
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
1 février 2009

J'ai installer Vmware, et l'ai configuré pour qu'il se connecte avec mon WinDbg.
Tou se connecte bien:



Microsoft (R) Windows Debugger Version 6.10.0003.233 X86
Copyright (c) Microsoft Corporation. All rights reserved.

Opened \\.\pipe\com_1
Waiting to reconnect...
Connected to Windows XP 2600 x86 compatible target at (Sun Feb 1 11:43:53.955 2009 (GMT+1)), ptr64 FALSE
Kernel Debugger connection established. (Initial Breakpoint requested)
Symbol search path is: C:\Windows\Symbols
Executable search path is: C:\WinDDK\6001.18002\FLO903A\objchk_wlh_x86\i386
*** ERROR: Symbol file could not be found. Defaulted to export symbols for ntkrnlpa.exe -
Windows XP Kernel Version 2600 (Service Pack 2) UP Free x86 compatible
Product: WinNt, suite: TerminalServer SingleUserTS Personal
Built by: 2600.xpsp_sp2_rtm.040803-2158
Machine Name:
Kernel base 0x804d7000 PsLoadedModuleList 0x805531a0
Debug session time: Sun Feb 1 11:43:49.515 2009 (GMT+1)
System Uptime: 0 days 0:01:09.578
WARNING: Inaccessible path: 'C:\Windows\Symbols'
Break instruction exception - code 80000003 (first chance)
*******************************************************************************
* *
* You are seeing this message because you pressed either *
* CTRL+C (if you run kd.exe) or, *
* CTRL+BREAK (if you run WinDBG), *
* on your debugger machine's keyboard. *
* *
* THIS IS NOT A BUG OR A SYSTEM CRASH *
* *
* If you did not intend to break into the debugger, press the "g" key, then *
* press the "Enter" key now. This message might immediately reappear. If it *
* does, press "g" and "Enter" again. *
* *
*******************************************************************************
nt!DbgBreakPointWithStatus+0x4:
80526da8 cc int 3



Mais quand je lance la commande "Go" (ou 'g') j'ai ceci:


kd> g
Break instruction exception - code 80000003 (first chance)
*******************************************************************************
* *
* You are seeing this message because you pressed either *
* CTRL+C (if you run kd.exe) or, *
* CTRL+BREAK (if you run WinDBG), *
* on your debugger machine's keyboard. *
* *
* THIS IS NOT A BUG OR A SYSTEM CRASH *
* *
* If you did not intend to break into the debugger, press the "g" key, then *
* press the "Enter" key now. This message might immediately reappear. If it *
* does, press "g" and "Enter" again. *
* *
*******************************************************************************
nt!DbgBreakPointWithStatus+0x4:
80526da8 cc int 3



Il me dise donc de la relance, mais quand je le fait j'ai "*BUSY* Debuggee is running..."
Après un court moment j'ai ceci:


ERROR: DavReadRegistryValues/RegQueryValueExW(4). WStatus = 5
ERROR: DavReadRegistryValues/RegQueryValueExW(5). WStatus = 5
ERROR: DavReadRegistryValues/RegQueryValueExW(6). WStatus = 5


Que faire ?
Messages postés
5
Date d'inscription
lundi 10 décembre 2007
Statut
Membre
Dernière intervention
11 juin 2009

Bonjour voldemort09

Le fait que "*BUSY* Debugee is running" s'affiche est parfaitement normal puisque le debuggeur reçoit les informations de la machine cible ... Donc pas de problèmes ! En effet Lorsque tu fait Ctrl+Break tu fais une pause directement dans le kernel de la machine cible.

Pour l'erreur, Google est ton ami !! mais plus sérieusement ce lien devrait résoudre ton problème : http://www.eggheadcafe.com/software/aspnet/31390913/configuring-windbg-for-ke.aspx
Ivan Brugiolo [MSFT] dit quelque chose qui devrait résoudre ton problème.

Bon continuation.
David.