Zmiana następnej wykonywanej instrukcji nie zawsze prowadzi do sensownych wyników w rejestrach i stosie wywołań. Używając tej techniki, można na przykład wyjść z wywołania funkcji, nie wykonując żadnego oczyszczania pamięci. To prowadzi do zaśmiecenia stosu. Należy zachować dużą ostrożność.
Plik odwzorowania pamięci jest plikiem tekstowym, zawierającym informacje
0 konsolidowanym programie.
• Nazwa modułu stanowiąca podstawową nazwę pliku.
• Datownik z nagłówka pliku programu (nie z systemu plików).
• Lista grup w programie z adresami początkowymi każdej gnipy (w postaci sekcja:adres względny), długościami, nazwami grup i klasami.
• Lista symboli publicznych z adresami (w postaci sekcja:adres względny), nazwami symboli, adresami prostymi i plikami .OBJ definiującymi symbole.
• Punkt wejścia (w postaci sekcja:adres względny).
• Lista poprawek.
Plik odwzorowania jest bardzo użyteczny przy usuwaniu usterek z ostatecznej wersji programu, na przykład w sytuacji, gdy nasz program przestaje działać na komputerze klienta i jedyne co mamy, to zrzut stosu i wartości rejestrów. Czasami czynności potrzebne do odtworzenia błędu nie są znane, więc nie można tego zrobić, wczytując program do debugera. Czasami też problem nie daje się odtworzyć podczas uruchomienia w debugerze.
Postępując zgodnie ze wskazówkami z rozdziału 15. i testując zarówno wersję ostateczną, jak i próbną, również możemy znaleźć się w sytuacji braku informacji potrzebnych do usunięcia błędów.
Niezależnie od przyczyny, dla której pozostajemy bez informacji symbolicznej, warto umieć używać dziennika dr Watsoną albo zrzutu stosu. Wtedy właśnie przydaje się plik odwzorowania. Na podstawie rejestru EIP można uzyskać naprawdę dobre pojęcie o tym, gdzie się „wykoleił” program. Zobaczmy w pliku odwzorowania, na jaką instrukcję wskazuje ten rejestr.
Następnie należy sprawdzić podejrzaną funkcję, odczytać, jakie pobiera parametry
1 spróbować wygenerować wersję maszynową tej funkcji z tymi samymi (to bardzo ważne) ustawieniami kompilacyjnymi, co w wersji debugowanej. Porównując kod ze zrzutu stosu i kodu maszynowego z informacjami z pliku odwzorowania, można uzyskać naprawdę wiele informacji.
Następnie, mówiąc językiem Herculesa Poirota, rozpocznijmy śledzenie problemu. Możemy w pliku odwzorowania sprawdzić również to, co zostało pobrane z biblioteki CRT i jak dużo miejsca zajmują zmienne.