2009-10-29 4 views

Répondre

5

Vous pouvez utiliser le fichier sos.dll dans le répertoire windbg.

Tout d'abord, chargez le sos.dll dans windbg:

.load clr10\sos.dll 

Ensuite, utilisez sam OU SaveAllModule pour extraire les modules sur l'emplacement du disque spécifique:!

!sam c:\notepad 
2

Pour extraire une DLL sans utiliser SOS, utilisez l'extension .writemem comme suit:

  1. découvrir les adresses de début et de fin du module à l'aide lmvm dllname
    exemple sortie pour ieframe:
    start end module name
    61370000 61fb8000 ieframe

  2. calculer la longueur = démarrage de fin: ? 61fb8000 - 61370000
    sortie: Evaluate expression: 12877823 = 00c48000

  3. puis enregistrez la DLL comme suit:
    .writemem C:\tmp\mydll.dll 61370000 L?00c48000

Il est peu probable que cela vous donne la DLL exacte car elle a été chargée à partir du disque, la résolution n'est pas triviale.

(en partie sur this article)

+0

J'ai essayé mais cela n'a pas fonctionné. J'ai attaché Windbg à Calc.exe et ai écrit l'exe et j'ai obtenu un plus gros fichier. Étrange. – Saar

+0

Je suppose que c'est dû à des divergences dans l'alignement - les fichiers pe32 occupent plus d'espace en mémoire que sur le disque en raison des besoins d'alignement mémoire plus importants. Vous devez correctement reconstruire l'exécutable après qu'il a été sauvegardé pour répondre à ces règles. En outre, la section de débogage n'est pas sauvegardée (car elle n'est pas mappée, je suppose). Les tables d'importation nécessitent également une reconstruction. – deemok

-2

Oui, il est vrai. calc.exe va également récupérer ses informations d'interface de langue multi-utilisateur et l'attacher en mémoire, comme beaucoup de programmes Windows comme mspaint, photoviewer, etc.

Questions connexes