Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Jeśli masz pliki źródłowe języka C lub C++ dla aplikacji, możesz użyć debugera znacznie wydajniej , jeśli debugujesz w trybie źródłowym.
Jednak wiele razy nie można przeprowadzić debugowania źródłowego. Być może nie masz plików źródłowych aplikacji. Możesz debugować kod innej osoby. Być może nie utworzono plików wykonywalnych z pełnymi symbolami .pdb. Nawet jeśli możesz przeprowadzić debugowanie źródłowe w aplikacji, może być konieczne śledzenie procedur systemu Microsoft Windows wywoływanych przez aplikację lub używanych do ładowania aplikacji.
W takich sytuacjach należy debugować w trybie assemblera. Ponadto tryb zestawu ma wiele przydatnych funkcji, które nie są obecne w debugowaniu źródłowym. Debuger automatycznie wyświetla zawartość lokalizacji pamięci oraz wartości rejestrów podczas uzyskiwania do nich dostępu, a także wyświetla adres licznika programu. Ten ekran sprawia, że debugowanie zestawu jest cennym narzędziem, którego można używać razem z debugowaniem źródłowym.
Kod dezasemblacji
Debuger analizuje przede wszystkim binarny kod wykonywalny. Zamiast wyświetlać ten kod w formacie nieprzetworzonym, debuger dezasembluje ten kod. Oznacza to, że debuger konwertuje kod z języka maszynowego na język zestawu.
Wynikowy kod (znany jako kod dezasemblacji) można wyświetlić na kilka różnych sposobów:
Polecenie u (Unassemble) dezasembluje i wyświetla określoną sekcję języka maszyny.
Polecenie uf (Unassemble Function) dezasembluje i wyświetla funkcję.
Polecenie up (Unassemble from Physical Memory) dezasembluje i wyświetla określoną sekcję języka maszyny, która została zapisana w pamięci fizycznej.
Polecenie ur (Unassemble Real Mode BIOS) rozkłada i wyświetla określony 16-bitowy kod trybu rzeczywistego.
Polecenie ux (Unassemble x86 BIOS) dezasembluje i wyświetla instrukcje kodu BIOS oparte na architekturze x86 ustawione pod określonym adresem.
(Tylko WinDbg) Okno dezasemblacji dezasembluje i wyświetla określoną sekcję kodu maszynowego. to okno jest automatycznie aktywne, jeśli wybierzesz polecenie automatycznie otwórz dezasemblowanie w menu okno. Możesz również otworzyć to okno, wybierając pozycję dezasemblacji w menu widoku, naciskając alt+7 lub naciskając przycisk dezasemblacji (alt+7).
Wyświetlanie dezasemblacji jest przedstawione w czterech kolumnach: przesunięcie adresu, kod binarny, mnemonik języka asemblerowego i szczegóły kodu asemblerowego. W poniższym przykładzie pokazano ten ekran.
0040116b 45 inc ebp
0040116c fc cld
0040116d 8945b0 mov eax,[ebp-0x1c]
Po prawej stronie wiersza, który reprezentuje bieżący licznik programu, na ekranie są wyświetlane wartości wszystkich lokalizacji pamięci lub rejestrów, do których uzyskuje się dostęp. Jeśli ten wiersz zawiera instrukcję gałęzi, zostanie wyświetlona notacja [br=1] lub [br=0]. Ta notacja wskazuje gałąź, która jest wybierana lub pomijana, odpowiednio.
Aby zmienić sposób wyświetlania instrukcji dezasemblowanych, można użyć polecenia .asm (Zmień opcje dezasemblacji ).
W oknie Dezasemblacji WinDbg wyróżniona jest linia reprezentująca bieżący licznik programu. Linie, w których ustawiane są punkty przerwania, są również wyróżnione.
Do manipulowania kodem zestawu można również użyć następujących poleceń:
Polecenie #(Wyszukaj wzorzec dezasemblacji) wyszukuje region pamięci dla określonego wzorca. To polecenie odpowiada przeszukiwaniu czterech kolumn w wyświetlaczu dezasemblowania.
Polecenie a (Assemble) może przetworzyć instrukcje asemblera i przetłumaczyć je na binarny kod maszynowy.
Tryb asemblera i tryb źródłowy
Debuger ma dwa różne tryby operacyjne: tryb zestawu i tryb źródłowy.
W przypadku jednoetapowego przechodzenia przez aplikację rozmiar pojedynczego kroku to jeden wiersz kodu zestawu lub jeden wiersz kodu źródłowego, w zależności od trybu.
Kilka poleceń tworzy różne wyświetlane dane w zależności od trybu.
W systemie WinDbg okno Dezasemblacji automatycznie przenosi się na przód podczas uruchamiania lub przechodzenia przez aplikację w trybie asemblerowym. W trybie źródłowym okno Źródło zostanie przeniesione na pierwszy plan.
Aby ustawić tryb, możesz wykonać jedną z następujących czynności:
Aby kontrolować tryb, użyj polecenia l+, l- (Ustaw opcje źródła ). Polecenie l-t aktywuje tryb montażu.
(Tylko WinDbg) Wyczyść polecenie Tryb źródłowy w menu Debugowanie , aby spowodować, że debuger wejdzie w tryb zestawu. Możesz również wybrać przycisk Tryb źródłowy wyłączony na pasku narzędzi.
W systemie WinDbg, gdy jesteś w trybie zestawu, usługa ASM jest widoczna na pasku stanu.
Menu skrótów w oknie Dezasemblacji WinDbg zawiera polecenie wyróżnienia instrukcji z bieżącej linii źródłowej. To polecenie wyróżnia wszystkie instrukcje odpowiadające bieżącemu wierszowi źródłowemu. Często pojedynczy wiersz źródłowy odpowiada wielu instrukcjom zestawu. Jeśli kod został zoptymalizowany, te instrukcje asemblera mogą nie być ciągłe. Polecenie wyróżnij instrukcje z bieżącego wiersza źródła umożliwia znalezienie wszystkich instrukcji, które zostały złożone z bieżącego wiersza źródłowego.
Pliki źródłowe języka asemblera
Jeśli aplikacja została napisana w języku zestawu, dezasemblacja, którą generuje debuger, może nie być dokładnie zgodna z oryginalnym kodem. W szczególności NO-OPs i komentarze nie będą obecne.
Jeśli chcesz debugować kod, odwołując się do oryginalnych plików asm, musisz użyć debugowania w trybie źródłowym. Możesz załadować plik zestawu, taki jak plik źródłowy C lub C++. Aby uzyskać więcej informacji na temat tego rodzaju debugowania, zobacz Debugowanie w trybie źródłowym.