Начало работы с отладчиком GNU на Linux: краткое руководство.

Отладка является необходимым навыком для программистов и исследователей безопасности. Обладая хорошим пониманием отладки, вы можете понять исполняемый файл на более низком уровне и ловить любые прячущиеся ошибки. Отладчик GNU или GDB является вечным инструментом отладки, на который программисты полагаются уже много лет. Вот как использовать GDB в Linux. Для программистов существует неотъемлемая необходимость в отладке. Обладая сильными знаниями в отладке, можно понять исполняемый файл на более низком уровне, а также обнаружить любые прячущиеся ошибки. Незаменимый инструмент для отладки — это отладчик GNU или GDB, который пользуются программисты уже много лет. Следующий раздел покажет, как использовать GDB в Linux.

Подготовка примеров программирования.

Чтобы изучить возможности GDB, вам понадобится исполняемый файл для экспериментов. Для демонстрации вы будете запускать GDB на программе проверки ключа один раз с доступным исходным кодом и отладочными символами, а затем без исходного кода и на простой программе с многопоточным выводом сообщений на экран, написанных на языке C и скомпилированных с помощью компилятора GCC (GNU C Compiler).

Вы, скорее всего, будете использовать GDB для своих программ. Поэтому убедитесь, что скомпилируете их с флагом -g в gcc для включения символов отладки. Без присутствия символов отладки и с сильно обрезанным бинарным файлом вам придется отлаживать дизассемблирование программы. Это потребует от вас прочного понимания ассемблерного языка и того, как работает выделение памяти в Linux, чтобы понять данные в стеке и регистрах.

Запуск программы с помощью GDB — просто как дважды два!

Вы можете запустить программу в GDB двумя способами. Либо введите gdb <program> и, после того как она загрузится, введите run. Либо запустите GDB, а затем используя команду file <program>, загрузите бинарный файл в GDB и затем запустите его с помощью команды run.

Если ваша программа требует аргументов командной строки для нормальной работы, убедитесь, что добавили аргументы после имени программы. Вот синтаксис для загрузки программы в GDB и запуска ее с аргументами:

gdb run

Увидеть мир из другой стороны: откройте глаза на новые возможности!

gdbfile run

Установка точек останова с помощью GDB.

Отладка с помощью точек прерывания — это установка жестких остановок в коде для прекращения потока выполнения, когда программа достигает точки прерывания. Установка точек прерывания позволяет вам пошагово просматривать код и исследовать, как каждая стадия выполнения влияет на данные и переменные. В GDB, при отладке программы с символами отладки, вы можете установить точку прерывания по имени функции или по номеру строки. Вот синтаксис: Для достижения максимальной сложности и изменчивости текста, при отладке программы можно установить точку прерывания с помощью имени функции или по номеру строки, при этом поток выполнения будет остановлен, когда программа достигнет точки прерывания. Таким образом, при исследовании каждой стадии выполнения будут влиять на данные и переменные.

break mainbreak 47

Для просмотра всех точек останова в текущей сессии отладки, введите:

info breakpoints

Для удаления одного или нескольких точек останова, наберите:

delete 2delete 3-5

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

break if n == 2

Если вы хотите продолжить выполнение программы после достижения точки останова, введите команду continue.

continue

Проходя по коду: изучаем новые возможности.

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

Это также помогает вам обнаружить корень аварий и изучать поведение программы с хирургической точностью, поскольку вы можете проходить по каждой строке кода, как вы хотите. Вы можете проходить по коду на три основных способа в GDB:

  1. Эта команда позволяет GDB перемещаться по исходному коду построчно. Это позволяет проходить по всему исходному коду по одной строке за раз.
  2. Следующая команда выполняет следующую строку исходного кода внутри текущей функции и затем останавливается. Команда «next» рассматривает функцию как одну строку, поэтому, если вы используете «next» перед вызовом функции, она будет рассматриваться как одна строка, в отличие от команды «step».
  3. Завершение: Команда завершения выполняет все оставшиеся строки внутри текущей функции и затем останавливается.

Изучение переменных: ключ к успеху.

Когда вы проходите по коду, вы хотите проверить значение переменных, чтобы увидеть, как логика программы меняет их. Вот синтаксис для просмотра значения переменных в GDB:

print

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

display

Настройка точек наблюдения — новый способ отслеживания происходящего.

Наблюдательные точки и условные точки прерывания тесно связаны, поскольку обе реагируют на изменения в программе. Наблюдательные точки используются для отслеживания изменений данных в коде. Например, вы можете хотеть, чтобы программа прерывалась каждый раз, когда меняется значение переменной. Вот как это сделать с помощью GDB:

watch

Отладка приложений с помощью GDB по отдельным потокам.

Отладка с помощью GDB позволяет производить точечную отладку при работе с многопоточными программами. В качестве примера мы рассмотрим простую программу на C, использующую четыре потока для вывода сообщений. Чтобы просмотреть порожденные в данный момент потоки в программе, используйте команду info.

info threads

Для работы с определенным потоком, вы можете выбрать его из списка, используя его индексный номер. Например:

thread 2

После выбора нити вы можете проследить ее исполнение, используя команды шаг, следующий и завершить, как показано выше.

Отладка удаленных приложений с помощью GDB — просто!

Вы также можете удаленно отлаживать программы, расположенные на другой системе. Для этого вам необходимо настроить gdbserver на целевой машине. Вы можете легко установить его, используя менеджер пакетов по умолчанию вашего распространения или другие менеджеры пакетов, которые вы установили на своей системе. Например, чтобы установить gdbserver на ваших системах на базе Ubuntu или Debian, используйте APT.

sudo apt install gdbserver

После установки перейдите в папку бинарного файла и выполните эту команду, чтобы запустить gdbserver:

gdbserver :

Сервер GDB должен возвращать вывод, что он запущен и слушает порт, который вы определили. Теперь на клиентской машине запустите GDB и подключитесь к удаленному серверу с помощью команды target.

target remote :

Написание скриптов GDB для автоматизации отладки.

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

Вот пример: Скрипты GDB позволяют программистам автоматизировать процесс отладки части кода несколько раз. Вместо установки точки останова, прохода по коду и печати значений переменных каждый раз, когда бинарный файл загружается, можно использовать скрипт GDB, чтобы автоматизировать весь процесс. Например, при помощи скрипта GDB можно автоматически проверять значения переменных и проходить по коду несколько раз.

set logging enabled onset logging file sample.outbreak main  command 1  backtrace  print N  continueendquit

В скрипте выше вы просите GDB включить журналирование и сохранить журнал в файл с именем sample.out, а затем установить точку останова в функции main. Для точки останова №1, то есть для точки останова в функции main, выполните следующие команды: backtrace, print, continue. В общем, GDB сначала выполнит backtrace, затем напечатает значение переменной «N», продолжит выполнение и в конце выйдет. Для выполнения этого скрипта используйте:.

Для перезаписи этого текста с высоким уровнем сложности и переменности необходимо выполнить несколько действий. В скрипте выше вы просите GDB включить журналирование и сохранить журнал в файл с именем sample.out, а затем установить точку останова в функции main. Для правильного выполнения скрипта нужно выполнить команды backtrace, print и continue для точки останова №1. GDB выполнит backtrace, затем напечатает значение переменной «N», продолжит выполнение и в конце выйдет. Для выполнения этого скрипта используйте:.

gdb -x

Прокрутить вверх