Podstawy gdb

https://chacker.pl/

Często używane polecenia w gdb są wymienione i opisane w tabeli poniżej

Teraz wydajemy następujące polecenia. Pierwsze polecenie przekompiluje nasz program Meet z symbolami debugowania i innymi przydatnymi opcjami

 

Debugowanie

Aby zdebugować nasz przykładowy program, najpierw zainstaluj gdb w swojej instancji Kali:

Teraz wydajemy następujące polecenia. Pierwsze polecenie przekompiluje nasz program Meet z symbolami debugowania i innymi przydatnymi opcjami

Debugowanie za pomocą gdb

https://chacker.pl/

Debugerem wybieranym do programowania w C w systemach Unix jest gdb. Zapewnia solidny interfejs wiersza poleceń, pozwalający na uruchomienie programu przy zachowaniu pełnej kontroli. Na przykład możesz ustawić punkty przerwania w wykonywaniu programu i monitorować zawartość pamięci lub rejestrów w dowolnym momencie. Z tego powodu debugery takie jak gdb są nieocenione zarówno dla programistów, jak i hakerów. Dla tych, którzy szukają bardziej graficznego debugowania w systemie Linux, dostępne są alternatywy lub rozszerzenia, takie jak ddd i edb.

Struktura pliku asemblacji

https://chacker.pl/

Plik źródłowy asmeblerowy jest podzielony na następujące sekcje:

  • .model Dyrektywa .model wskazuje rozmiar plików sekcji .data i .text .
  • .stack Dyrektywa .stack wyznacza początek sekcji stosu i wskazuje rozmiar stosu w bajtach.
  • .data Dyrektywa .data wyznacza początek sekcji .data i definiuje zmienne, zarówno zainicjowane, jak i niezainicjowane.
  • ..text. dyrektywa .text przechowuje polecenia programu

Tryby adresowania

https://chacker.pl/

W asemblerze można zastosować kilka metod, aby osiągnąć ten sam cel. W szczególności istnieje wiele sposobów wskazania efektywnego adresu, którym można manipulować w pamięci. Opcje te nazywane są trybami adresowania i są podsumowane w tabeli. Pamiętaj, że rejestry zaczynające się od „e” mają 32 bity (4 bajty), a te z literą „r” mają 64 bity (8 bajtów).

Wywołania systemowe: int, sysenter i syscall

https://chacker.pl/

Wywołania systemowe to mechanizm umożliwiający procesowi żądanie wykonania uprzywilejowanej operacji, gdy kontekst i wykonanie kodu zostaną przełączone z trybu użytkownika do trybu jądra. Starsza instrukcja x86 służąca do wywołania wywołania systemowego to int 0x80. Jest to uważane za przestarzałe, ale nadal jest obsługiwane w 32-bitowych systemach operacyjnych. Instrukcja sysenter jest jej następcą dla aplikacji 32-bitowych. W przypadku 64-bitowych systemów operacyjnych i aplikacji opartych na systemie Linux wymagana jest instrukcja syscall. Podczas pisania kodu powłoki i innych wyspecjalizowanych programów lub ładunków należy dobrze rozumieć różne metody wywoływania wywołań systemowych i ustawiania odpowiednich argumentów.

lea

https://chacker.pl/

Polecenie le ładuje efektywny adres źródła do miejsca docelowego. Można to często zaobserwować podczas przekazywania argumentu miejsca docelowego do funkcji kopiującej ciąg znaków, jak na przykład w poniższym przykładzie demontażu gdb w składni AT&T, w którym zapisujemy adres bufora docelowego na górę stosu jako argument funkcji gets:

call i ret

https://chacker.pl/

Instrukcja call przekierowuje wykonanie do innej funkcji. Adres pamięci wirtualnej po instrukcji wywołania jest najpierw odkładany na stos, pełniąc funkcję wskaźnika powrotu, a następnie następuje przekierowanie wykonania do wywoływanej funkcji. Polecenie ret jest używane na końcu procedury, aby powrócić do polecenia po wywołaniu.