Шпаргалка полезных команд GDB
2) как подсказка тем кто постоянно работает с IDA, Ghidra или любым другим мощным и надежным инструментом, но в силу тех или иных обстоятельств решить задачу проще и быстрее с помощью GDB, и не очень хочется залезать в официальную документацию и снова все вспоминать
Основные команды
Запуск
Общий синтаксис выбора исполняемого файла для анализа
gdb program_name
Запустить выполнение программы
run | r
Присоединиться к gdbserver
target remote host:port
Присоединиться к процессу, отключиться от него
attach PID / detach
quit | q CTRL + D
Статический анализ
Выбрать синтаксис ассемблера
set disassembly-flavor intel/att
Просмотреть информацию об архитектуре, секциях
info file
Получение списка функций
info functions | i func
Получение asm-листинга функции
disas func_name disas address
Если у вас есть исходники (можем собрать с опцией -g3 для gcc) или исследуемая программа содержит отладочную информацию, можем посмотреть листинг ее исходного кода
Знакомство с отладчиком gdb
list func_name
Динамический анализ
Установить аргументы для каждого запуска программы и посмотреть их
set args show args
Распределение виртуальной памяти
info proc mappings
registers
Отладка
Шаг с заходом в функцию
step | s
Шаг с прыжком через вызываемую подпрограмму
next | n
Выполнить до нужной строки, адреса
until | u number_of_list_string until | u *func_name+offset until | u *address
Информация об аргументах функции, локальных переменных (для файлов, содержащих отладочную информацию) и фрейме текущей функции
info args info locals info frame
Просмотреть список процессов и выбрать интересующий
info threads thread number
Способы расстановки breakpoints
b func_name b *func_name+offset b *address
Посмотреть список точек останова, включить или отключить, удалить breakpoint
info break disable/enable breakpoint_number delete breakpoint_number ignore breakpoint_number n // остановится на этой точке пройдя ее n раз
Продолжить выполнение до следующего breakpoint-а
continue | c
telescope telescope $rsp+64
Для отображения значения по указанному адресу используется команда x, где через «/» указывается формат вывода
x/i — инструкция x/x — hex x/s — строка x/a — адрес
а также размер вывода
x/b — 8-bit x/h — 16-bit x/w — 32-bit x/g — 64-bit
x/64bx x/i $pc
Передача аргумента командной строки
run $(python -c «print(‘A’*32 + ‘xdexad’)») run $(echo «asdf\xdexad»)
Для передачи значений функциям ввода
Gdb Сервер
Запустить сервер gdb для отладки
gdbserver host:port program
Reverse Debug
Все мы проходили через этот неловкий момент когда во время отладки мы проскочили интересующую нас функцию, и теперь снова надо перезапускать отладчик, проходить тот же путь на CFG и т.п. Чтобы избежать этого, в gdb есть такая фишка как Reverse Debug, позволяющая сохранить состояние программы и обратно отладить до него.
gdb . Примеры использования.
Для этого, после запуска отладчика укажем gdb, что хотим начать использовать reverse debug и стоит сохранять состояния программы
record
После этого станут доступны следующие команды
reverse-step reverse-next
Создание дампа
Сдампить участок памяти ( часто необходимо при работе с распаковщиками )
dump memory output_file start_addr end_addr
Настройка для работы
Для того чтобы закрепить вывод команды, скажем просмотр инструкций во время отладки и отображения регистров можно воспользоваться командой display
display/5i $pc display/g $rax display/g $rbx display/g $rcx
Делаем жизнь проще с GEF
Для эффективного использования gdb лучше воспользоваться плагином gef, он уже включает в себя удобный закрепленный вывод, используемый при динамическом анализе, а также набор собственных команд расширяющий возможности нашего универсального отладчика. Рассмотрим некоторые наиболее полезные.
Посмотреть состояние aslr, включить/отключить
aslr aslr on/off
Для проверки исполняемого файла на наличие ASLR, Canary, PIE и т.д.
checksec
heap chunks
Находясь в функции можем получить значение канарейки и адрес, где она расположена
canary
Чуть более удобный вывод, чем info proc mappings
vmmap
Просмотр регистра флагов и изменение их
flags flags -Flag_name +Flag_name
Помощь для поиска уязвимостей форматной строки (установка на них точек останова, информация по найденным функциям)
format-string-helper
Создание паттерна и его поиск
pattern create 128 pattern search 0x61616167 pattern search $rbp
Поиск строк по шаблону
search-pattern pattern
patch byte/word/dword/qword address value
Печать массива в формате удобном для копирования в python код. Параметр b должен быть 8/16/32/64, l контролирует длину массива
print-format -b 64 -l 1 $rsp
Для поиска шеллкода по шаблону
shellcode search pattern shellcode get shellcode_number
Ксорим значения в памяти и регистрах
xor display address/register size xor_key xor patch address/register size xor_key
- реверс-инжиниринг для новичков
- gdb
Источник: habr.com
GDB (Пошаговое введение)
GDB расшифровывается как GNU Project Debugger и является мощным инструментом отладки для C (наряду с другими языками, такими как C ++). Он помогает вам копаться в ваших программах на C во время их выполнения, а также позволяет вам увидеть, что именно происходит, когда ваша программа вылетает. . GDB работает с исполняемыми файлами, которые представляют собой двоичные файлы, созданные в процессе компиляции.
В демонстрационных целях нижеприведенный пример выполняется на машине Linux с указанными ниже спецификациями.

Давайте узнаем на практике: —
1. Перейдите в командную строку Linux и введите «gdb».

Приглашение Gdb open сообщает, что оно готово для команд. Чтобы выйти из GDB, введите quit или q.

2. Ниже приведена программа, которая демонстрирует неопределенное поведение при компиляции с использованием C99.

Примечание. Если объект с автоматической продолжительностью хранения не инициализирован явно, его значение является неопределенным, где неопределенное значение является либо неопределенным значением, либо представлением прерывания.
3. Теперь скомпилируйте код. (здесь test.c).
Флаг g означает, что вы можете видеть собственные имена переменных и функций в фреймах стека, получать номера строк и видеть исходный код при переходе по исполняемому файлу.
-std = Флаг C99 подразумевает использование стандартного C99 для компиляции кода.
Флаг -o записывает результат сборки в выходной файл.

4. Запустите gdb со сгенерированным исполняемым файлом.

Вот несколько полезных команд для начала работы с gdb для приведенного выше примера: —
run или r -> выполняет программу от начала до конца.
break или b -> устанавливает точку останова на определенной строке.
отключить -> отключить точку останова.
enable -> включить отключенную точку останова.
next или n -> выполняет следующую строку кода, но не углубляется в функции.
step -> перейти к следующей инструкции, погрузившись в функцию.
list или l -> отображает код.
print или p -> используется для отображения сохраненного значения.
quit или q -> выходит из GDB.
clear -> очистить все точки останова.
продолжить -> продолжить нормальное выполнение.
5. Теперь введите «l» в приглашении GDB, чтобы отобразить код.

6. Давайте введем точку останова, скажем, строку 5.

Если вы хотите установить точку останова на разных строках, вы можете ввести «b line_number». По умолчанию «list or l» отображает только первые 10 строк.
7. Чтобы увидеть точки останова, введите «info b».

8. Сделав все выше, допустим, вы передумали и хотите вернуться.
Введите «отключить b».

Как отмечено синим кружком, Enb становится n для отключенного.
9. Для повторного включения недавно отключенной точки останова. Введите «включить b».

10. Запустите код, набрав «run или r». Если вы не установили никаких точек останова, команда run просто выполнит всю программу.

11. Чтобы увидеть значение переменной, введите «print имя_переменной или p имя_переменной ».

Выше показаны значения, хранящиеся в x во время выполнения.
12. Чтобы изменить значение переменной в gdb и продолжить выполнение с измененным значением, введите «set variable_name ».
13. Ниже на скриншоте показаны значения переменных, из которых вполне понятно, почему на выходе мы получили мусорное значение. При каждом выполнении ./test мы будем получать разные выходные данные.
Упражнение: попробуйте использовать set x = 0 в gdb при первом запуске и посмотрите результат c.

GDB предлагает гораздо больше способов отладки и понимания вашего кода, таких как изучение стека, памяти, потоков, управление программой и т. Д. Я надеюсь, что приведенный выше пример поможет вам начать работу с gdb.
Хотите учиться на лучших видео и практических задачах, ознакомьтесь с Базовым курсом C для базового и продвинутого C.
Источник: progler.ru
Открываем формат GDB

GDB является распространенным форматом файлов баз данных (БД) InterBase. Разработан изначально компанией Borland.
Софт для работы с GDB
Рассмотрим программы, которые открывают искомое расширение.
Способ 1: IBExpert
IBExpert — это приложение с немецкими корнями, которое является одним из популярных решений для управления базами данных InterBase. Распространяется бесплатно в пределах СНГ. Обычно используется в связке с серверным программным обеспечением Firebird. При установке необходимо внимательно отнестись к тому, чтобы версия Firebird была строго 32-битной. Иначе работать IBExpert не будет.

-
Запускаем программу и кликаем на пункт «Зарегистрировать базу» в «База данных».





Способ 2: Embarcadero InterBase
Embarcadero InterBase представляет собой систему управления БД, в том числе и имеющих расширение GDB.

-
Взаимодействие с пользователем осуществляется через графический интерфейс IBConsole. После ее открытия нужно запустить новый сервер, для чего жмем на «Add» в меню «Server».









Недостатком Embarcadero InterBase является отсутствие поддержки русского языка.
Способ 3: Recovery for Interbase
Recovery for Interbase – это софт для восстановления БД Interbase.
- После запуска приложения жмем «Add files» для добавления GDB файла.

- В открывшемся окне «Проводника» переходим в каталог с исходным объектом, выделяем его и щелкаем «Открыть».

- Файл импортируется в программу, после чего жмем «Next».

- Далее появляется запись о необходимости сделать резервную копию базы данных, которую требуется восстановить. Нажимаем «Next».

- Осуществляем выбор каталога сохранения конечного результата. По умолчанию им является «Мои документы», однако при желании можно выбрать другую папку, нажав «Select a different folder».

- Происходит процесс восстановления, после окончания которого появляется окно с отчетом. Для выхода из программы жмем «Done».

Таким образом мы выяснили, что формат GDB открывается таким ПО, как IBExpert и Embarcadero InterBase. Преимуществом IBExpert является то, что он имеет интуитивно понятный интерфейс и предоставляется бесплатно. Еще одна программа Recovery for Interbase также взаимодействует с рассматриваемым форматом при необходимости его восстановления.
Источник: lumpics.ru
Как пользоваться gdb
Программа gdb — это популярный отладчик для программ, написанных на языке программирования Си и С++. Отладчик позволяет выполнить программу пошагово, посмотреть значения всех переменных на каждом из этапов выполнения, а если это необходимо, то и дизассемблировать код и посмотреть состояние регистров процессора.
В сегодняшней статье мы рассмотрим как пользоваться gdb для отладки и анализа выполнения программ, написанных на Си. Попытаемся разобраться с основными возможностями программы.
Как пользоваться gdb
1. Установка gdb
Обычно, отладчик устанавливается вместе с другими инструментами для сборки программного обеспечения. Для установки всего необходимого в Ubuntu или Debian достаточно выполнить:
sudo apt install build-essential
Для того чтобы установить отладчик отдельно, выполните:
sudo apt install gdb
В CentOS или Fedora команда установки будет выглядеть следующим образом:
sudo dnf install gdb
А для Arch Linux надо выполнить:
sudo pacman -S gdb
Теперь отладчик gdb установлен и вы можете его использовать.
2. Компиляция программы
Для того чтобы получить максимум полезной информации во время отладки, например, имена переменных и номера строк кода программу следует скомпилировать особым образом. Для примеров из этой статьи мы будем использовать такую небольшую программу на Си, в процессе будем её изменять, но начнём с этого:
#include
int main() int var1 = 0;
int var2 = 2;
char greeting[] = «Hello from losstn»;
printf(«%s», greeting);
>
Для того чтобы всё необходимое было включено в исполняемый файл, программу надо собрать с опцией -g. В данном случае команда будет выглядеть вот так:
gcc -g -o program program.c
Затем вы можете её выполнить:

3. Запуск отладчика
Для того чтобы запустить программу достаточно передать путь к ней отладчику. Какие-либо опции указывать не обязательно:
После запуска отладчика вы попадаете в его командный интерфейс. Программа ещё не запущена, запущен только отладчик, в котором вы можете ею управлять с помощью специальных команд. Вот основные команды gdb:
- break или b — создание точки останова;
- info или i — вывести информацию, доступные значения: break, registers, frame, locals, args;
- run или r — запустить программу;
- continue или c — продолжить выполнение программы после точки останова;
- step или s — выполнить следующую строчку программы с заходом в функцию;
- next или n — выполнить следующую строчку без захода в функцию;
- print или p — вывести значение переменной;
- backtrace или bt — вывести стек вызовов;
- x — просмотр содержимого памяти по адресу;
- ptype — просмотр типа переменной;
- h или help — просмотр справки по команде;
- q или quit — выход из программы.
4. Запуск программы
Для того чтобы запустить программу надо воспользоваться командой run в консоли gdb. Просто выполните:

И программа будет запущена и выполнена. Если вам надо передать программе какие-либо аргументы, то следует их передать команде run, например:
(gdb) run arg1 arg2
Если программа завершилась с ошибкой, вы можете вывести стек вызовов функций для того чтобы узнать в какой именно функции возникла ошибка:
Программа сообщает на какой строчке исходного кода возникла проблема. Чтобы посмотреть весь исходник выполните команду list:

Для того чтобы вызвать ошибку Segmentation Fault и проверить как это работает можете добавить в программу такие строки и перекомпилировать её:
char *buffer = malloc(sizeof(char) * 10);
while(1) *(++buffer) = ‘c’;
>
Тут мы выделяем из памяти массив символов размером 10 элементов и заполняем его и память, которая находится за ним символами «с», пока программа не упадёт.
5. Точки останова
Неотъемлемая часть отладки приложения — это точки останова. С помощью них можно остановить выполнение программы на любом месте исходного кода или функции, а затем проанализировать все переменные, а также что происходит с программой. Сначала смотрим исходник программы:

По умолчанию команда выводит первые десять строк. Ей можно передать в качестве аргумента номер строки, строки возле которой надо отобразить или имя функции, например:

Например, давайте установим точку останова на восьмой строчке исходника:
Теперь, когда вы запустите программу на выполнение она остановиться в указанной точке:

Для того чтобы выполнить следующую строчку без входа в функцию используйте команду next:

Тогда выполнится следующая строка кода в программе. Если надо войти в функцию и посмотреть что в ней происходит следует использовать команду step:
Для отладки циклов можно устанавливать точки останова на основе условия, например, на 11-той строке, если значение переменной var1 будет 20:
(gdb) break 11 if var1==20

Чтобы этот пример заработал добавьте в код цикла следующую строчку, как на снимке:
Посмотреть все установленные точки останова можно такой командой:

6. Вывод информации
Сами по себе точки останова не очень полезны, но после каждой остановки программы можно посмотреть полностью её состояние и значения всех переменных, а это уже намного интереснее. Для просмотра информации используется команда info, а для вывода значения конкретной переменной — print. Для того чтобы посмотреть значения всех локальных переменных выполните:
(gdb) info locals

А для вывода значений аргументов функции:
Вывести значение определённой переменной можно с помощью print:
Интересно, что с помощью print можно выполнять арифметические операции и их результат не только выводится на экран, но и присваивается внутренней переменной, таким образом его можно будет вывести ещё раз позже или использовать в других вычислениях. Например:
(gdb) print var1+30

Имя временной переменной, куда были записаны данные отображается перед самим результатом, например, в последней команде это $2. Теперь можно ещё раз вывести это значение:

Таким образом вы можете анализировать состояние программы, на каждой точке останова и искать ошибки.
7. Изменение информации
С помощью команды set можно изменить значение переменной прямо во время выполнения программы. Например:
(gdb) break 7
(gdb) run
(gdb) set var2 = 20
(gdb) print var2

8. Вывод типа
С помощью команды ptype вы можете вывести тип переменной. Например:
(gdb) break 7
(gdb) run
(gdb) ptype var2

9. Просмотр адресов
Ещё интереснее исследовать как программы на Си работают с памятью. Команда print может выводить не только выводить значения переменных, но и их адреса в памяти. Приведите программу к такому виду и перекомпилируйте её:
#include
#include
#include
int main(int argc, char *argv[]) int var1 = 0;
int var2 = 2;
char *buffer = malloc(sizeof(char) * 10);
while(var1 < 10)var1++;
*(++buffer) = ‘c’;
>
printf(«%sn», buffer);
>
Запустите отладчик и установите точку останова на девятой строке и запустите программу:
Теперь вы можете вывести адреса всех переменных в памяти с помощью символа argc
(gdb) print buffer
(gdb) print buffer
Как видите, аргументы функции находятся в одном месте, локальные переменные в другому, но не очень далеко, а во память выделенная из кучи, на которую указывает указатель buffer — совсем далеко. Можете поменять программу и поэкспериментировать с разным количеством переменных.
10. Просмотр памяти
С помощью команды x или eXamine можно посмотреть содержимое памяти, по определённому адресу. Например, смотрим содержимое переменной var2:

Если вы не знаете адрес переменной, можно передать её имя с оператором https://losst.pro/kak-polzovatsya-gdb» target=»_blank»]losst.pro[/mask_link]
Как работать с файлами с расширением GDB
Расширение GDB – это формат файла базы данных, созданной в программе InterBase. Это программа с открытым исходным кодом (бесплатное программное обеспечение), в отличие от GnuPG и PGP. Это формат по умолчанию, который ранее использовался InterBase 6.5, а более поздние версии (начиная с 7.0) используют расширение IB.

Способы открытия файла с расширением GDB.
Для чего нужен файловый формат GDB
Расширение файла GDB обозначает, что здесь содержится какая-либо информация для навигаторов или спутников GPS. Это могут быть точки маршрута, сам маршрут или что-либо подобное. Такие компоненты необходимо для правильной работы большинства навигаторов или других устройств, использующих карты и технологию GPS.
Софт для работы с GDB
Чем открыть GDB-файлы? В интернете есть множество редакторов и интерактивных программ для разработчиков – в основном, это специализированное ПО для программистов. Ниже мы рассмотрим наиболее популярное программное обеспечение, которое позволит открыть файл gdb, – это IBExpert, Embarcadero InterBase и Recovery For Interbase.
IBExpert
IBExpert – очень полезный и функциональный инструмент для управления различными БД на компьютере. Программа полностью поддерживает SQL и имеет простой и в то же время понятный пользовательский интерфейс, который не вызовет никаких проблем при использовании. Дополнительным преимуществом программы является поддержка практически всех необходимых расширений, включая файл gdb. Для объединения и совместного использования отдельных таблиц программа характеризуется поддержкой различных модулей, а также полной поддержкой и возможностью управления любой БД на основе механизма Firebird или InterBase.

Используя программу, также можно создать стандартную БД или такие базы данных, которые поддерживают язык запросов SQL. Для образовательных целей программа также доступна в бесплатной версии. Бесплатная лицензия имеет аналогичную функциональность, но ограничивает размер БД до 50 мегабайт. Вся информация о бесплатной версии находится на официальном сайте производителя. IBExpert также позволяет контролировать созданные БД, управлять многоэтапными сценариями и оптимизировать производительность всей базы данных.
ВАЖНО. Доступ к установочному файлу можно получить после бесплатной регистрации на веб-сайте производителя.
Софт позволяет организовать взаимодействие и визуализацию всех объектов БД, изменять код запросов, SQL, позволяет легко набросать даже сложную БД. Проводит мониторинг и оптимизацию производительности БД. IBExpert оснащён модулем для объединения и совместного чтения существующих таблиц и многоэтапными сценариями с предварительным просмотром результатов отдельных запросов. Кроме того, предоставляется система анализа OLAP, метаданных и документация базовой структуры, а также отладчик хранимых компонентов. Наиболее важные функции программы IBExpert:
- функция Unicode;
- мониторинг и оптимизация производительности БД;
- запуск расширенных SQL-запросов с использованием скриптов;
- IBExpert позволяет создавать БД с использованием модели;
- копирование БД;
- ускорение и оптимизация;
- IBExpert имеет обширный модуль отчётности;
- извлечение метаданных для создания копии структуры БД;
- экспорт в CSV и через ODBC;
- управление правами пользователей;
- IBExpert предоставляет подсказки синтаксиса и помощник.
IBExpert – это профессиональная интегрированная среда разработки (IDE) InterBase и Firebird. Содержит множество утилит для кодировщиков, визуальные редакторы для всех компонентов БД, редактор SQL iScript Executive, отладчик и т. д. Это одна из самых полных и обширных программ для управления БД IB и FB, доступных на рынке. Несмотря на огромные возможности, софт интуитивен и не требует особых навыков. Благодаря визуальному управлению базами не понадобятся идеальные познания в синтаксисе DDL или DML, а работа с БД становится намного быстрее и удобнее.
Чтобы открыть файл с расширением .gdb, выполните следующие действия:
- На панели инструментов найдите кнопку «База данных». В выпадающем списке выберите «Зарегистрировать базу».

- В появившемся окне настроек необходимо ввести следующие данные:
- сервер/протокол – local, default;
- версия – Firebird 2.5;
- кодировка — UNICODE_FSS;
- пользователь – sysdba;
- пароль – masterkey.
- Далее нажмите кнопку «Файл базы данных», после чего откроется диалоговое окно, где нужно найти и указать файл gdb.

- Нажмите кнопку «Регистрировать».
- ПКМ на загрузившейся БД – «Подключиться к базе». Готово!
Embarcadero InterBase
Embarcadero InterBase – заслуживающий внимания коммерческий софт SQL с функциями защиты данных, синхронизацией и аварийным восстановлением. От одного устройства до небольшого корпоративного решения, InterBase, удостоенный награды IoT, – это выбор разработчиков и глобальное развёртывание ISV. Приложение используется во всём мире – от медицинских, железнодорожных и авиакомпаний до POS, CRM и даже MARS Rover.

Открываем формат gdb в Embarcadero InterBase:
- Server – Add;
- Next;
- Next
- Нажмите кнопку Use Default, затем Next;
- Finish;
- В левой части программы появится новый сервер. Чтобы добавить БД, его нужно «развернуть» и правой кнопкой мыши выбрать «Add»;
- В открывшемся окне выберите кнопку с троеточием, далее откроется диалог, где нужно указать путь к файлу gdb;
- ОК. Готово!
Это легкодоступная коммерческая база данных, которая идеально подходит для распределённых систем, требующих сверхнизкого TCO с дополнительной защитой на протяжении всего жизненного цикла разработки. Сосредоточьтесь на своём продукте, не беспокоясь о данных.
Recovery For Interbase
Recovery For Interbase – это программное обеспечение для восстановления базы данных. Оно использует мощный алгоритм восстановления, делающий процесс быстрее. Ключевая особенность Recovery for Interbase заключается в восстановлении всего содержимого базы данных, например, таблиц, полей и индексов. Чтобы начать восстановление, пользователю просто нужно нажать кнопку «Восстановить» в верхней части интерфейса.
Преимущество Recovery for Interbase заключается также и в том, что он способен сохранять все восстановленные данные в файл SQL. Эти элементы могут быть добавлены в базовые данные с помощью простого просмотра файлов или перетаскивания мышью. Программа может восстанавливать файлы из Interbase и Firebird, Recovery for Interbase поддерживает множество форматов этих типов баз данных, таких как, например, gdb, ib или fdb.

- Софт оснащён интерфейсом, который облегчает все действия.
- ПО является лёгким и не требует много свободного места на жёстком диске.
- В пробной версии восстановление данных недоступно.
Для открытия базы данных в формате gdb необходимо выполнить следующее:
- Add files;
- Откроется проводник, где нужно указать путь к файлу gdb;
- Next;
- Next;
- Start;
- Done;
- Готово! База данных восстановлена.

Описанный софт позволит вам без проблем открыть или восстановить базу данных в формате gdb. К использованию рекомендуется первая программа из списка – IBExpert. Она более простая и с ней справится даже неопытный пользователь. Недостатком Embarcadero InterBase является отсутствие русского языка, а Recovery For Interbase поможет при необходимости восстановить повреждённый файл.
Источник: nastroyvse.ru