Debugowanie

Wprowadzenie

Debuger GDB umożliwie wykonanie programu instukcja po instrukcji i śledzenie wartości rejestrów i zmiennych. Pozwala to często zauważyć błędy w programie.

Skrócony opis możliwości GDB

Zadania

W poniższych zadaniach do pobrania są pliki binarne. Aby zacząć je debugować należy najpierw nadać im atrybut wykonywalnośći np. poleceniem

chmod u+x nazwa_programu

Zadanie 1

Program hello64 powinien wyświetlać napis “Hello World!”. Niestety nie wyświetla.

  • Zdebugować program używając gdb i znaleźć przyczynę.
  • Naprawić błąd bezpośrednio w gdb tak aby program wykonał się poprawnie wyświetlając napis.
  • Napisać skrypt dla gdb, który automatyzuje ten proces.

Jako rozwiązanie prześlij sam skrypt gdb

Wskazówki:

  • Breakpointa można ustawić na etykietę stop (lub _start).
  • Zdeasemblować funkcję _start.
  • Wykonać program krok po kroku obserwując zawartość rejestrów.
  • W razie problemów można skompilować program hello64 z pierwszych zajęć i porównać kod w GDB.

Zadanie 2

Dostępny jest plik funkcja.c z funkcją main, zawierający przykłady użycia i plik binarny oblicz32 programu w wersji 32-bit. Chciano przekompilować ten program do wersji 64-bitowej. Niestety zaginął plik C z definicją funkcji

long oblicz(short, int, long);

Odtwórz plik oblicz.c (z implementacją funkcji oblicz) używając gdb i analizując wersję binarną funkcji oblicz.

Jako rozwiązanie prześlij tylko plik oblicz.c.

Zadanie 3

Używając debugera do obejścia zabezpieczeń odczytaj sekretna informację.

Jako rozwiązanie prześlij hasło dostępu lub skrypt GDB obchodzący zabezpieczenia.

Programy binarne do wyboru: