Réglage manuel des points d'arrêt dans WinDBG
Je suis en train d'examiner l'assemblée pour un exécutable à l'aide de WinDBG, mais je vais avoir du mal à arriver à elle. Je veux mettre un point d'arrêt à la première instruction dans mon programme, mais lorsque j'essaie de le faire manuellement (à l'aide de l'adresse du module), WinDBG me dit qu'il est "impossible d'insérer un point d'arrêt" à cet endroit en raison d'un "accès non Valide à l'emplacement de la mémoire."
J'ai remarqué que lorsque je créer un point d'arrêt à la source de code interface utilisateur, l'adresse n'est pas la même que la première partie de mon module (Dans mon exemple: "Win32FileOpen", un simple programme que j'ai écrit.) Est-il un en-tête de quelque sorte que nécessite l'ajout d'un décalage à l'adresse de mon module?
Dans un autre question, j'ai vu la suggestion: "je voudrais tenter de calculer le point d'arrêt adresse: Module de départ + code de début + code offset", mais n'était pas certain où obtenir ces valeurs. Quelqu'un peut-il donner des précisions sur ce point?
La raison pour laquelle je ne l'utilise pas seulement la source de l'interface graphique, c'est que je veux être en mesure de le faire avec un programme que je ne peut pas avoir la source/symboles pour.
Si il y a un moyen plus facile de commencer à travailler immédiatement avec l'exécutable je l'ai ouvert, s'il vous plaît laissez-moi savoir. (par exemple, l'Ouverture d'un .exe Olly immédiatement me montre de l'assemblée pour que .exe, recherche pour référencées chaînes me donne les résultats de ce module, etc. WinDBG semble commencer à m'en ntdll.dll qui n'est généralement pas utile pour moi.)
0:000> lm
start end module name
00000000`00130000 00000000`0014b000 Win32FileOpen C (private pdb symbols) C:\cfinley\code\Win32FileOpen\Debug\Win32FileOpen.pdb
00000000`73bd0000 00000000`73c2c000 wow64win (deferred)
00000000`73c30000 00000000`73c6f000 wow64 (deferred)
00000000`74fe0000 00000000`74fe8000 wow64cpu (deferred)
00000000`77750000 00000000`778f9000 ntdll (pdb symbols) c:\symbols\mssymbols\ntdll.pdbEB43E23B12409C84E3CC7635BAF5A32\ntdll.pdb
00000000`77930000 00000000`77ab0000 ntdll32 (deferred)
0:000> bu 00000000`00130000
0:000> bl
0 e x86 00000000`001413a0 0001 (0001) 0:**** Win32FileOpen!main <-- One that is generated via GUI
1 e x86 00000000`00130000 0001 (0001) 0:**** Win32FileOpen!__ImageBase <-- One I tried to set manually
0:000> g
Unable to insert breakpoint 1 at 00000000`00130000, Win32 error 0n998
"Invalid access to memory location."
bp1 at 00000000`00130000 failed
WaitForEvent failed
ntdll!LdrpDoDebuggerBreak+0x31:
00000000`777fcb61 eb00 jmp ntdll!LdrpDoDebuggerBreak+0x33 (00000000`777fcb63)
Vous devez vous connecter pour publier un commentaire.
Vous devriez être en mesure de faire la liste de tous les points d'entrée de votre fichier dll à l'aide de l'suivantes:
mais attention ce sera la liste de tout ce qui,
si vous voulais juste Win32FileOpen:
une liste de tous ce match, ce sera la liste les bonnes adresses que vous pouvez définir le point d'arrêt sur.
Votre autre question sur les décalages, vous pouvez définir un point d'arrêt sur une méthode de nom ou d'adresse et d'ajouter un décalage:
Si vous ouvrez l'exécutable, il debugbreak immédiatement et sans doute pas commencer le chargement de votre dll, si c'est un problème, alors vous pouvez définir des points d'arrêt non résolus:
ou tout simplement joindre au démarrage de l'application, la liste des chaînes, puis de définir les points d'arrêt.
Vous pouvez aussi envisager de mettre des points d'arrêt sur la ligne de source:
où XXX est le numéro de la ligne, vous devez utiliser la tombe des accents de demark la ligne de source, espérons que cette aide.
Modifier
Viens de trouver ce lien qui peut être d'intérêt pour vous: http://mattoh.wordpress.com/2010/08/06/setting-breakpoint-on-entry-poin-with-windbg/
aussi l'un des commentateurs a souligné l'un des pseudo-registres qui vous permet de régler le pb sur le point d'entrée de votre exe:
ou
bu Win32FileOpen!main
pas de travail ou avez-vous toujours besoin de l'adresse de début de module?Win32FileOpen!main
fonctionne dans ce cas particulier (parce que j'ai les symboles), mais si je ne l'ai pas, ce ne serait pas de travail parce qu'il n'y aurait pas de "main" symbole de, correct?ba r4 ADDRESS
qui allait se briser sur les 4 premiers octets lus à partir de l'adresse