GDB - один из лучших отладнчиков, доступный на всех платформах, который умеет отлаживать программы на многих языках таких как С, С++, Go, Rust и многих других. Также его можно использовать для реверс-инженеринга бинарных файлов. Для себя я решил собрать в эту заметку его основные команды.
Установка
Во многих Linux дистрибутивах он идет из коробки, а вот на Mac OS надо прибегрунуть к небольшому “шаманству”.
Сначала нужно установить сам GDB(я предпочитаю использовать brew):
brew install gdb
Теперь необходиом сделать для него сертификат:
- Зайти в
Связка ключей
- В меню выбрать
Связка ключей
->Ассистент сертификации
->Создать сертификат
- В появившемся окне задать следующие поля:
Имя
- имя сертификатаТип идент.
- выбрать Самоподписанный корневой сертификатТип сертификата
- выбрать Подпись кода
- Поставить галку
Заменить настройки по умолчанию
- Далее дойти до окна выбора местонахождения сетрификата и указать в нем Система
- Нажать кнопку
Создать
- В окне
Связка ключей
двойным щелчком выбрать созданный сертификат и в разделе Доверие выбрать Всегда доверять. - Закрыть
Связка ключей
. - В консоли выполнить команду
codesign -f -s "<имя сертификата>" <путь до gdb>
- Перезагрузить компьютер.
Основные команды
Загрузка файла в отладчик:
#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