jestr ten jest też używany do przechowywania wartości tymczasowych i do zwracania wartości wywołań funkcji. Rejestr ECX jest zwykle używany wewnątrz pętli, na przykład przez polecenie repnz. Rejestry ECX i EDX są często używane jako rejestry tymczasowe. Operatory arytmetyczne i logiczne zmieniają zawartość rejestrów EAX, ECX i EDX. Licznik rozkazów EIP wskazuje na aktualnie wykonywaną instrukcję. Rejestry ESI i EDI są używane przy obliczeniach na wskaźnikach i w trakcie wykonywania pętli. Jeśli wystąpi naruszenie dostępu, a wskaźnik EIP wskazuje instrukcję repnz, movsw lub inną instrukcję przenoszącą lub zamieniająca, to należy sprawdzić, co wskazują rejestry ECX, ESI i EDI. Dzięki nim prawdopodobnie wykryjemy problem. Rejestr ESP jest rejestrem stosu. Rejestr EBP jest rejestrem ramki stosu. Obu tych rejestrów używa się do obserwacji stosu.
Przypuśćmy na przykład, że podczas uruchamiania programu uzyskaliśmy naruszenie dostępu. Należy przejść do debugera i obejrzeć rejestry. Jeśli rejestr EAX jest pusty, to jest to dobry znak, bo tylko użyliśmy pustego wskaźnika.
154
155
jak to zrobić
1. Prawym przyciskiem myszy kliknąć w oknie „Watch”.
2. Z menu podręcznego wybrać polecenie Hexadecimal.
jak to zrobić
W wypadku pojawienia się wyjątku, środowisko Visual C++ wyświetli wiadomość w oknie „Debug”, zwykle u dołu ekranu. Należy zwrócić uwagę na podany tam kod wyjątku.
1. Z menu Debug wybrać polecenie Exceptions. (Zwrócić uwagę na to, że to polecenie menu jest aktywne tylko podczas debugowania.)
2. Na liście wyjątków odnaleźć ten, który wywołaliśmy.
3. Zmienić ustawienie opcji Action na Stop always.
4. Ponownie uruchomić sesję debugera wybierając z menu Debug polecenia Restart. Od tej chwili napotkanie wyjątku będzie powodowało przejście do debugera. Można w nim wówczas obejrzeć stos, przeanalizować dane i użyć pozostałych technik debugowania, w celu sprawdzenia, co spowodowało błąd.