Asembler x86/Jak używać debuggera ALD: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
optymalizacja |
krok-po-kroku niezbyt jakoś dobrze brzmi |
||
Linia 1:
<noinclude>{{Spis treści}}</noinclude>
==Wprowadzenie==
Debugger jest programem służącym do analizy kodu wykonywalnego. Pozwala zrozumieć to, co dzieje się w trakcie wykonywania skompilowanego programu jak również odnaleźć ewentualne błędy (z ang. ''bugs''). Wykorzystamy w tym celu program '''ald''' (''Assembly Language Debugger''). Jest to przykładowy debugger przeznaczony dla języka asembler. Pozwala on śledzić wykonywanie programu
==Instalacja==
Linia 112:
Widzimy, że pierwsze wiersze przykładowego listingu w ostatniej kolumnie do złudzenia przypominają niedawno kompilowany kod źródłowy napisany w języku asembler. Zauważamy jedynie, że używane etykiety często zastąpione są już konkretnymi adresami liczbowymi w używanej pamięci. Lewa kolumna zawiera kolejno adresy pamięci zajmowanej przez dane polecenie. Środkowa kolumna zawiera polecenia w kodzie maszynowym. W tym momencie nie chcemy znać zawartości dalszej pamięci, więc naciskamy klawisz '''q''' a następnie '''ENTER'''.
==Wykonanie
Aby wykonać pierwszą instrukcję, naciskamy '''n''' po czym klawisz '''ENTER'''.
Linia 175:
==Wstrzymanie wykonania==
W przypadku dłuższych i bardziej skomplikowanych algorytmów wykonywanie
Przykładowo poniższy program miał za zadanie wyświetlenie zawartości rejestru EAX w systemie dziesiętnym.
Linia 312:
</source>
Przede wszystkim interesują nas zawartości rejestrów EAX i EBX. Na tym etapie nie widać żadnych potencjalnych problemów, możemy więc kontynuować wykonanie programu
<source lang=bash>
Linia 343:
</source>
Na pierwszy rzut oka tym razem również wszystko jest w porządku. Jednak po wnikliwej analizie zawartości rejestrów zauważymy, że w rejestrze EDX znajdują się pozostałości z poprzedniego obiegu pętli. Aby uniknąć błędnych wyników, należy poprawić kod tak, aby zerowanie rejestru EDX przeprowadzać na początku każdego obiegu pętli przed wykonaniem operacji dzielenia. Spróbujemy mimo wszystko kontynuować działanie programu
Widzimy, że operacja przesunięcia nie została wykonana.
|