2017-01-16 1 views
0

Je suis en train de déboguer 'smartgit for windows'. Je veux savoir comment il appelle 'git' (commande il passe à git). Je démarre VS et attacher le processus de smartgit. Je suppose qu'il communique avec git par Windows pipe, et d'autres API comme ReadFile et WriteFile et ainsi de suite, donc définissez des points d'arrêt à ces fonctions. Après quelques options, je coche 'Just My Code' et supprime tous les modules d'exclusion. Dans les paramètres de symboles, je télécharge des symboles. et je peux m'assurer que 'Kernel32.pdb' a été chargé. 'smartgit.exe' (Win32): Loaded 'Q:\Program Files (x86)\SmartGit\bin\smartgit.exe'. Module was built without symbols. 'smartgit.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ntdll.dll'. Symbols loaded. 'smartgit.exe' (Win32): Loaded 'C:\Windows\SysWOW64\kernel32.dll'. Symbols loaded. 'smartgit.exe' (Win32): Loaded 'C:\Windows\SysWOW64\KernelBase.dll'. Symbols loaded. 'smartgit.exe' (Win32): Loaded 'C:\Windows\SysWOW64\user32.dll'. Symbols loaded. Pause à Win32-API pour inspecter les comportements du processus

[email protected]: 765EF0C0 8B FF mov edi,edi
765EF0C2 55 push ebp
765EF0C3 8B EC mov ebp,esp
765EF0C5 6A FE push 0FFFFFFFEh
765EF0C7 68 C0 52 68 76 push 766852C0h
mais je suis le point de vue du code disasm quand bps ont été déclenchées. Je suis sûr que j'ai coché l'option "Afficher le code source".

POURQUOI? et comment voir le code C de ReadFile, je veux savoir ce qu'il (smartgit) lit et écrit. Donc, j'inspecte à travers lpBuffer.

+0

Il n'est pas toujours évident de savoir ce que deux-par-quatre est nécessaire. Décrivez en vos propres termes ce que vous pensez que «Module a été construit sans symboles» pourrait signifier. –

Répondre

1

pdb fichiers ne contenant pas le code source. il peut contenir des informations comment carte RVA adresse à la source fichier/ligne. mais cette information n'est utile que si vous avez ce fichier source. parce que vous n'avez pas de fichiers source pour les dlls système Windows (ntdll, kernel32, kernelbase ..) vous et ne pouvez pas le voir le code c/C++ dans le débogueur. et les informations habituelles sur les fichiers/lignes sources sont supprimées des pdbs système - car les fichiers sources n'existent pas pour le téléchargement. mais avec les fichiers pdb vous pouvez voir les noms de fonctions internes et de symboles (pas seulement les symboles exportés) - déjà un grand avantage qui aide grandement au débogage.

dans le cas ReadFile - pour ce que vous avez besoin de code source ici? quand vous pouvez voir dire lpBuffer adresse dans [esp + 8] à la première instruction (765EF0C0 dans votre décharge), puis dans [ebp+0xc]?

+0

@TanakaYasen - mais vous n'avez pas de fichiers sources pour ntdll, kernel32, kernelbase. et ne peut pas voir le code c/C++. Cependant, la fonction ReadFile est très petite et n'a pas besoin ici de source – RbMm

+0

thx, vous me le rappellerez lorsque le code source change, les points d'arrêt deviennent invalides car le mappage de 'RVA' au code source est incorrect. Je sais que [esp + offset] est au nom des params et [eip] sous l'instruction 'call', car l'appel d'une fonction est toujours compilé comme la séquence asm' push param3; pousser param2; appuyez sur l'appel de param1 _func'. mais il est déroutant que le décalage diffère de convention d'appel (stdcall/cdecl) .Je ne suis pas tranquille au courant de cette affaire. Même si vous êtes familier, aussi un travail inefficace. où télécharger le code source de 'Kernel32.c' (compatible avec Kernel32.pdb)? – TanakaYasen

+0

@TanakaYasen - «où télécharger le code source de Kernel32.c» - peur que ce ne soit pas possible) – RbMm