Współpraca z gdb zaczyna się rozwijać, więc mała notka z najbardziej przydatnymi komendami, ale najpierw przydatne linki:
Te klika komend warto wpisać na stałe do pliku konfiguracyjnego
~/.gdbinit.
# zastąpienie domyślnego assemblera att, na wersję intel-owsą
set disassembly-flavor intel
# zapisywanie historii poleceń do pliku
set history filename ~/.gdb_history
set history save on
set history size 100000
# TUI - text user interface (po wywołaniu layout)
set tui border-kind ascii
set tui border-mode half
set tui active-border-mode bold
Komendy TUI, które pozwalają zorientować się co tak naprawdę dzieje się z programem:
- layout - wyświetla pseudo okno, w którym może być prezentowany kod assemblera, rejestry lub kod źródłowy. Przykładowe wywołania: layout asm, layout src, layout reg
- info win - informacja o wyświetlanych oknach
- focus - przełączanie focusu na różne okna, przydatne przy pracy z myszką, przykład: focus cmd
- refresh - odświeża wszystkie okna, sam nie wiem czemu, ale ich wygląd często się psuje. Wygodniejszą metodą służącą odświeżaniu jest zastosowanie skrótu klawiaturowego, ale o tym poniżej
Przydatne skróty klawiaturowe w pracy z TUI.
- Wyłączanie TUI, można zastosować jeden z poniższych skrótów:
- Odświeżanie okien - odpowiednik komendy refresh:
- Włączanie layoutu
- Ctrl+x 1 - jedno okno
- Ctrl+x 2 - dwa okno
- Szybkie odwołanie się do komend z historii, bez potrzeby fokusownia okna cmd i używania strzałek
Operowanie z kodem, to przede wszystkim prezentacja wycinków pamięci w jakimś przyjaznym formacie:
- display - wyświetla zmienną/rejestr, przy każdym zatrzymaniu programu, np. display $eax
- x - wyświetlanie zwartości pamięci, format wywołania wygląda następująco
x/[rozmiar][format][rozmiar pola] [adres], gdzie:
- Rozmiar - ilość bajtów jakie będą wyświetlone
- Format:
- d - dec
- x - hex
- z - jakeiś inne hex?
- u - unsigned dec
- f - float
- c - char (ASCII)
- a - adres
- i - instrukcja
- s - string
- Rozmiar pola:
- b - byte (8 bitów)
- h - halfword (16 bitów)
- w - word (32 bity)
- g - giant (64 bity)
Przykład użycia x:
(gdb) x/12xb 0x8048af4
0x8048af4 <_ZN8MyClass1C2Ev>: 0x55 0x89 0xe5 0x83 0xec 0x08 0x8b 0x45
0x8048afc <_ZN8MyClass1C2Ev+8>: 0x08 0x83 0xec 0x0c
Debugowani kodu assemblera trochę różni się trochę od sytuacji, gdy działamy tylko z kodem źródłowym. W takim wypadku zamiast wyniku działania jednej linii kodu, interesuje nas bardziej jaki jest wynik działania jednej instrukcji kodu:
- si - wykonuje pojedynczą instrukcję
Brak komentarzy:
Prześlij komentarz