2009-10-29 20 views

Odpowiedz

5

Możesz użyć sos.dll w katalogu windbg.

Najpierw załadować sos.dll w WinDbg:

.load clr10\sos.dll 

następnie wykorzystać sam lub SaveAllModule wyodrębnić moduły dotyczące określonej lokalizacji na dysku:!

!sam c:\notepad 
2

Aby wyodrębnić DLL bez użycia SOS, użyj rozszerzenia .writemem w następujący sposób:

  1. odkryj adresy początkowe i końcowe modułu lmvm dllname
    przykład wyjście ieframe:
    start end module name
    61370000 61fb8000 ieframe

  2. obliczenia długości = koniec-start: ? 61fb8000 - 61370000
    Wydajność: Evaluate expression: 12877823 = 00c48000

  3. następnie zapisać DLL następująco:
    .writemem C:\tmp\mydll.dll 61370000 L?00c48000

Jest mało prawdopodobne, aby podać dokładną bibliotekę DLL, ponieważ została ona załadowana z dysku, naprawienie tego nie jest banalne.

(częściowo oparte na this article)

+0

Próbowałem, ale to nie zadziałało. Dołączyłem Windbg do Calc.exe i napisałem exe i dostałem większy plik. Dziwne. – Saar

+0

Przypuszczam, że jest to spowodowane rozbieżnościami w wyrównaniu - pliki pe32 zajmują więcej miejsca w pamięci niż na dysku ze względu na większe wymagania dotyczące wyrównania pamięci. Musisz poprawnie odbudować plik wykonywalny po jego porzuceniu, aby spełnić te reguły. Poza tym sekcja debugowania nie jest zrzucana (ponieważ nie jest zmapowana, jak sądzę). Tabele importu również wymagają rekonstrukcji. – deemok

-2

Tak, to prawda. calc.exe będzie również podnosić informacje o interfejsie dla wielu użytkowników i dołączać je do pamięci, podobnie jak wiele programów Windows takich jak mspaint, przeglądarka zdjęć itp.

Powiązane problemy