Заметка по работе с gdb

GDB - один из лучших отладнчиков, доступный на всех платформах, который умеет отлаживать программы на многих языках таких как С, С++, Go, Rust и многих других. Также его можно использовать для реверс-инженеринга бинарных файлов. Для себя я решил собрать в эту заметку его основные команды.

Установка

Во многих Linux дистрибутивах он идет из коробки, а вот на Mac OS надо прибегрунуть к небольшому “шаманству”.

Сначала нужно установить сам GDB(я предпочитаю использовать brew):

brew install gdb

Теперь необходиом сделать для него сертификат:

  1. Зайти в Связка ключей
  2. В меню выбрать Связка ключей->Ассистент сертификации->Создать сертификат
  3. В появившемся окне задать следующие поля:
    • Имя - имя сертификата
    • Тип идент. - выбрать Самоподписанный корневой сертификат
    • Тип сертификата - выбрать Подпись кода
  4. Поставить галку Заменить настройки по умолчанию
  5. Далее дойти до окна выбора местонахождения сетрификата и указать в нем Система
  6. Нажать кнопку Создать
  7. В окне Связка ключей двойным щелчком выбрать созданный сертификат и в разделе Доверие выбрать Всегда доверять.
  8. Закрыть Связка ключей.
  9. В консоли выполнить команду
codesign -f -s  "<имя сертификата>"  <путь до gdb>
  1. Перезагрузить компьютер.

Основные команды

Загрузка файла в отладчик:

#gdb -q gdb-demo

или

$ gdb -q
(gdb) load gdb-demo

Загрузка файла с аргуменами:

$ gdb -q --args gdb-demo arg1 arg2...argN

или

$ gdb
(gdb) file exe
(gdb) set args argument1 argument2
(gdb) run

Для запуска GDB в интерактивном режиме надо выполнить команду gdb -tui

Вывод инструкций в формате Intel

set disassembly-flavor intel

Вывод инструкций в формате AT&T

set disassembly-flavor att

Настройка количества строк при останове:

display/i $pc
display/5i $pc

Хелп:

h

Установить breakpoint

b

Начать выполнение программы, если она еще не выполняется:

r

Продолжить выполнение программы:

c

Прервать выполнение в любой момент можно нажатием Ctr+C.

Отцепиться от программы, оставшись при этом в отладчике:

detach

Step - шаг вперед или несколько шагов вперед:

s
s 3

Next - тоже самое, что и step, только без захода внутрь других методов и процедур:

n
n 3

Step для одной машинной инструкции:

si
si 3

Next для одной машинной инструкции:

ni
ni 3

Список фукнций в бинарнике:

info functions

Полезные ссылки

  1. Отладка двоичных файлов под gdb
  2. Debugging with GDB
  3. Conventions used plus preliminary remarks
 
comments powered by Disqus