/ / Obtenir une fonction pour une adresse DLL suite à un crash - Windows, débogage, dll

Obtention de la fonction pour une adresse DLL après un crash - windows, debugging, dll

Je sais que lorsqu'une application plante, lele système signale qu'il s'est écrasé à l'emplacement 0x00004b79 dans mydll.dll. J'ai le code source, et j'ai le binaire, mais je n'ai pas de PDB ou de fichiers de liste de la construction de cette DLL.

Le plantage est répétable, mais je ne peux pas installer undébogueur sur la machine de production, et le plantage ne se produit pas dans les environnements de développement ou de débogage. J'ai configuré Dr. Watson, et j'ai un vidage sur incident et un fichier journal Dr. Watson.

Le fichier journal Dr. Watson contient ce désassemblage pour la fonction en cours d'exécution:

        10604b70 8b442408         mov     eax,[esp+0x8]
10604b74 8b542404         mov     edx,[esp+0x4]
10604b78 50               push    eax
FAULT ->10604b79 8b4120           mov     eax,[ecx+0x20]    ds:0023:00000020=????????
10604b7c 52               push    edx
10604b7d 6801800000       push    0x8001
10604b82 50               push    eax
10604b83 ff156c946210 call dword ptr [mydll!DllUnregisterServer+0x1720c (1062946c)]
10604b89 c20800           ret     0x8

(Les instructions INT 3 précèdent et succèdent l'extrait d'assemblage ci-dessus.)

La trace de pile inclut uniquement l'adresse mydll + 0x4b79. Il ne donne aucune information sur l'appelant.

Le chargement du vidage sur incident dans windbg n'a fourni aucune information supplémentaire.

Comment puis-je déterminer dans quelle fonction (ou mieux encore, dans quelle ligne de code) le crash s'est produit?

Réponses:

2 pour la réponse № 1

Créez un vidage sur incident de votre application et examinez-le à l'aide d'un débogueur, WinDbg est le choix évident ici. Un vidage sur incident vous donnera une trace de la pile et des informations détaillées sur les erreurs.

Edit: Quant à ne pas pouvoir installer un débogueur, DrWatson est préinstallé et capable de générer des vidages sur incident qui peuvent ensuite être examinés sur une machine différente.